Changeset 11473 for trunk/oscam-garbage.c
- Timestamp:
- 01/18/19 20:17:57 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/oscam-garbage.c
r11246 r11473 45 45 46 46 SAFE_MUTEX_LOCK(&add_lock); 47 47 48 48 int32_t bucket = counter++; 49 49 50 50 if(counter >= HASH_BUCKETS) 51 51 { 52 52 counter = 0; 53 53 } 54 54 55 55 SAFE_MUTEX_UNLOCK(&add_lock); 56 56 57 57 struct cs_garbage *garbage = (struct cs_garbage*)malloc(sizeof(struct cs_garbage)); 58 58 if(garbage == NULL) 59 59 { 60 cs_log("*** MEMORY FULL -> FREEING DIRECT MAY LEAD TO INSTABILITY!!! !***");60 cs_log("*** MEMORY FULL -> FREEING DIRECT MAY LEAD TO INSTABILITY!!! ***"); 61 61 NULLFREE(data); 62 62 return; … … 92 92 #endif 93 93 94 garbage->next = garbage_first[bucket]; 94 garbage->next = garbage_first[bucket]; 95 95 garbage_first[bucket] = garbage; 96 96 97 97 cs_writeunlock(__func__, &garbage_lock[bucket]); 98 98 } … … 106 106 struct cs_garbage *garbage, *next, *prev, *first; 107 107 set_thread_name(__func__); 108 int32_t timeout_time = 2 *cfg.ctimeout/1000+6;109 108 int32_t timeout_time = 2 * cfg.ctimeout / 1000 + 6; 109 110 110 while(garbage_collector_active) 111 111 { 112 112 time_t deltime = time(NULL) - timeout_time; 113 113 114 114 for(i = 0; i < HASH_BUCKETS; ++i) 115 115 { … … 117 117 cs_writelock(__func__, &garbage_lock[i]); 118 118 first = garbage_first[i]; 119 120 for(garbage = first, prev = NULL; garbage; prev = garbage, garbage = garbage->next, j++)121 { 122 if(j ==2)119 120 for(garbage = first, prev = NULL; garbage; prev = garbage, garbage = garbage->next, j++) 121 { 122 if(j == 2) 123 123 { 124 124 j++; … … 126 126 } 127 127 128 if(garbage->time < deltime) 128 if(garbage->time < deltime) // all following elements are too new 129 129 { 130 130 if(prev) … … 140 140 } 141 141 142 if(j <3)142 if(j < 3) 143 143 { 144 144 cs_writeunlock(__func__, &garbage_lock[i]); … … 163 163 garbage_debug = debug; 164 164 int32_t i; 165 165 166 166 SAFE_MUTEX_INIT(&add_lock, NULL); 167 167 168 168 for(i = 0; i < HASH_BUCKETS; ++i) 169 169 { … … 194 194 SAFE_COND_SIGNAL(&sleep_cond); 195 195 SAFE_THREAD_JOIN(garbage_thread, NULL); 196 196 197 for(i = 0; i < HASH_BUCKETS; ++i) 197 198 { cs_writelock(__func__, &garbage_lock[i]); } … … 207 208 } 208 209 } 209 210 for(i = 0; i < HASH_BUCKETS; ++i) 211 { 210 211 for(i = 0; i < HASH_BUCKETS; ++i) 212 { 212 213 cs_writeunlock(__func__, &garbage_lock[i]); 213 214 cs_lock_destroy(__func__, &garbage_lock[i]); 214 215 } 215 216 216 217 217 pthread_mutex_destroy(&add_lock); 218 pthread_cond_destroy(&sleep_cond); 218 219 pthread_mutex_destroy(&sleep_cond_mutex); 219 220 }
Note:
See TracChangeset
for help on using the changeset viewer.