Changeset 10033 for trunk/libtransmission/web.c
- Timestamp:
- Jan 28, 2010, 6:25:18 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/libtransmission/web.c
r10032 r10033 133 133 dns_cache_item_free( struct dns_cache_item * item ) 134 134 { 135 tr_free( item->host ); 136 tr_free( item->resolved_host ); 137 memset( item, TR_MEMORY_TRASH, sizeof( struct dns_cache_item ) ); 138 tr_free( item ); 135 if( item != NULL ) 136 { 137 tr_free( item->host ); 138 tr_free( item->resolved_host ); 139 memset( item, TR_MEMORY_TRASH, sizeof( struct dns_cache_item ) ); 140 tr_free( item ); 141 } 139 142 } 140 143 … … 147 150 } 148 151 149 static int150 dns_cache_compare_key( const void * va, const void * key )151 {152 const struct dns_cache_item * a = va;153 return strcmp( a->host, key );154 }155 156 152 typedef enum 157 153 { … … 162 158 tr_dns_result; 163 159 160 static void 161 dns_cache_clear_entry( struct tr_ptrArray * cache, const char * host ) 162 { 163 struct dns_cache_item key; 164 key.host = (char*) host; 165 dns_cache_item_free( tr_ptrArrayRemoveSorted( cache, &key, dns_cache_compare ) ); 166 } 167 164 168 static tr_dns_result 165 169 dns_cache_lookup( struct tr_web_task * task, const char * host, const char ** resolved ) … … 169 173 if( task->session->web != NULL ) 170 174 { 175 struct dns_cache_item key; 176 struct dns_cache_item * item; 171 177 tr_ptrArray * cache = &task->session->web->dns_cache; 172 178 173 struct dns_cache_item * item = tr_ptrArrayFindSorted( cache, host,174 dns_cache_compare_key);179 key.host = (char*) host; 180 item = tr_ptrArrayFindSorted( cache, &key, dns_cache_compare ); 175 181 176 182 /* has the ttl expired? */ 177 183 if( ( item != NULL ) && ( item->expiration <= tr_time( ) ) ) 178 184 { 179 tr_ptrArrayRemoveSorted( cache, host, dns_cache_compare_key ); 180 dns_cache_item_free( item ); 185 dns_cache_clear_entry( cache, host ); 181 186 item = NULL; 182 187 } … … 203 208 if( task->session->web != NULL ) 204 209 { 205 struct dns_cache_item * item = tr_new( struct dns_cache_item, 1 ); 210 struct dns_cache_item * item; 211 tr_ptrArray * cache = &task->session->web->dns_cache; 212 213 dns_cache_clear_entry( cache, host ); 214 215 item = tr_new( struct dns_cache_item, 1 ); 206 216 item->host = tr_strdup( host ); 207 217 item->resolved_host = NULL; 208 218 item->expiration = tr_time( ) + MIN_DNS_CACHE_TIME; 209 219 item->success = FALSE; 210 tr_ptrArrayInsertSorted( &task->session->web->dns_cache, item, dns_cache_compare );220 tr_ptrArrayInsertSorted( cache, item, dns_cache_compare ); 211 221 } 212 222 } … … 222 232 if( task->session->web != NULL ) 223 233 { 224 struct dns_cache_item * item = tr_new( struct dns_cache_item, 1 ); 234 struct dns_cache_item * item; 235 tr_ptrArray * cache = &task->session->web->dns_cache; 236 237 dns_cache_clear_entry( cache, host ); 238 239 item = tr_new( struct dns_cache_item, 1 ); 225 240 item->host = tr_strdup( host ); 226 241 item->resolved_host = tr_strdup( resolved ); 227 242 item->expiration = tr_time( ) + ttl; 228 243 item->success = TRUE; 229 tr_ptrArrayInsertSorted( &task->session->web->dns_cache, item, dns_cache_compare );244 tr_ptrArrayInsertSorted( cache, item, dns_cache_compare ); 230 245 ret = item->resolved_host; 231 246 dbgmsg( "adding dns cache entry for \"%s\": %s", host, resolved );
Note: See TracChangeset
for help on using the changeset viewer.