Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #define _GNU_SOURCE 1
00028
00029 #include <string.h>
00030 #include <libgen.h>
00031 #include "../../mem/shm_mem.h"
00032 #include "../../globals.h"
00033 #include "tls_mod.h"
00034 #include "tls_util.h"
00044
00045
00046
00047
00048
00049 int shm_asciiz_dup(char** dest, char* val)
00050 {
00051 char* ret;
00052 int len;
00053
00054 if (!val) {
00055 *dest = NULL;
00056 return 0;
00057 }
00058
00059 len = strlen(val);
00060 ret = shm_malloc(len + 1);
00061 if (!ret) {
00062 ERR("No memory left\n");
00063 return -1;
00064 }
00065 memcpy(ret, val, len + 1);
00066 *dest = ret;
00067 return 0;
00068 }
00069
00070
00071
00072
00073
00074 void collect_garbage(void)
00075 {
00076 tls_domains_cfg_t* prev, *cur;
00077
00078
00079
00080
00081 lock_get(tls_domains_cfg_lock);
00082
00083
00084
00085
00086 prev = *tls_domains_cfg;
00087 cur = (*tls_domains_cfg)->next;
00088
00089 while(cur) {
00090 if (cur->ref_count == 0) {
00091
00092 prev->next = cur->next;
00093 tls_free_cfg(cur);
00094 }
00095
00096 prev = cur;
00097 cur = cur->next;
00098 }
00099
00100 lock_release(tls_domains_cfg_lock);
00101 }
00102