]> git.meshlink.io Git - catta/blobdiff - psched.c
fix two memory leaks
[catta] / psched.c
index e9f77b9e08e1d0bf7d622b673dc7a720fb455431..22474f3f2692351b05d88163eaf9e0f6cbd7b156 100644 (file)
--- a/psched.c
+++ b/psched.c
@@ -8,7 +8,7 @@
 #define FLX_RESPONSE_HISTORY_MSEC 700
 #define FLX_RESPONSE_DEFER_MSEC 20
 #define FLX_RESPONSE_JITTER_MSEC 100
-#define FLX_PROBE_DEFER_MSEC 100
+#define FLX_PROBE_DEFER_MSEC 20
 
 flxPacketScheduler *flx_packet_scheduler_new(flxServer *server, flxInterface *i) {
     flxPacketScheduler *s;
@@ -116,7 +116,7 @@ static guint8* packet_add_query_job(flxPacketScheduler *s, flxDnsPacket *p, flxQ
 
         qj->done = 1;
 
-        /* Drop query after some time from history from history */
+        /* Drop query after some time from history */
         flx_elapse_time(&tv, FLX_QUERY_HISTORY_MSEC, 0);
         flx_time_event_queue_update(s->server->time_event_queue, qj->time_event, &tv);
 
@@ -231,7 +231,7 @@ void flx_packet_scheduler_post_query(flxPacketScheduler *s, flxKey *key, gboolea
 
     flx_elapse_time(&tv, immediately ? 0 : FLX_QUERY_DEFER_MSEC, 0);
 
-    for (qj = s->query_jobs; qj; qj = qj->jobs_next)
+    for (qj = s->query_jobs; qj; qj = qj->jobs_next) {
 
         if (flx_key_equal(qj->key, key)) {
 
@@ -247,6 +247,8 @@ void flx_packet_scheduler_post_query(flxPacketScheduler *s, flxKey *key, gboolea
             break;
         }
 
+    }
+    
     qj = query_job_new(s, key);
     qj->delivery = tv;
     qj->time_event = flx_time_event_queue_add(s->server->time_event_queue, &qj->delivery, query_elapse, qj);
@@ -581,7 +583,7 @@ static flxProbeJob* probe_job_new(flxPacketScheduler *s, flxRecord *record) {
 
 static guint8* packet_add_probe_query(flxPacketScheduler *s, flxDnsPacket *p, flxProbeJob *pj) {
     guint size;
-    guint8 *r;
+    guint8 *ret;
     flxKey *k;
 
     g_assert(s);
@@ -601,7 +603,8 @@ static guint8* packet_add_probe_query(flxPacketScheduler *s, flxDnsPacket *p, fl
 
     /* Create the probe query */
     k = flx_key_new(pj->record->key->name, pj->record->key->class, FLX_DNS_TYPE_ANY);
-    r = flx_dns_packet_append_key(p, k);
+    ret = flx_dns_packet_append_key(p, k);
+    g_assert(ret);
 
     /* Mark this job for addition to the packet */
     pj->chosen = TRUE;
@@ -612,7 +615,7 @@ static guint8* packet_add_probe_query(flxPacketScheduler *s, flxDnsPacket *p, fl
             continue;
 
         /* Does the record match the probe? */
-        if (k->class != pj->record->key->class || strcmp(k->name, pj->record->key->name))
+        if (k->class != pj->record->key->class || flx_domain_equal(k->name, pj->record->key->name))
             continue;
         
         /* This job wouldn't fit in */
@@ -625,7 +628,7 @@ static guint8* packet_add_probe_query(flxPacketScheduler *s, flxDnsPacket *p, fl
 
     flx_key_unref(k);
             
-    return r;
+    return ret;
 }
 
 static void probe_elapse(flxTimeEvent *e, gpointer data) {
@@ -642,7 +645,7 @@ static void probe_elapse(flxTimeEvent *e, gpointer data) {
 
     /* Add the import probe */
     if (!packet_add_probe_query(s, p, pj)) {
-        g_warning("Record too large!");
+        g_warning("Record too large! ---");
         flx_dns_packet_free(p);
         return;
     }
@@ -684,6 +687,7 @@ static void probe_elapse(flxTimeEvent *e, gpointer data) {
         }
 
         probe_job_free(s, pj);
+        
         n ++;
     }
     
@@ -704,7 +708,6 @@ void flx_packet_scheduler_post_probe(flxPacketScheduler *s, flxRecord *record, g
     
     flx_elapse_time(&tv, immediately ? 0 : FLX_PROBE_DEFER_MSEC, 0);
 
-    /* No duplication check here... */
     /* Create a new job and schedule it */
     pj = probe_job_new(s, record);
     pj->delivery = tv;