]> jfr.im git - irc/ircd-hybrid/libopm.git/commitdiff
Fixed scan_free and connection_free clenaup
authorstrtok <redacted>
Mon, 9 Sep 2002 20:15:29 +0000 (20:15 +0000)
committerstrtok <redacted>
Mon, 9 Sep 2002 20:15:29 +0000 (20:15 +0000)
src/libopm.c
src/test.c

index 38c2b7a636a31d869c15157d321e966a56323241..1999e858d61d642fa0fb2d90016ff5b07ac16abc 100644 (file)
 
 OPM_PROTOCOL_CONFIG_T *protocol_config_create();
 void protocol_config_free(OPM_PROTOCOL_CONFIG_T *);
+
 OPM_SCAN_T *scan_create(OPM_T *, OPM_REMOTE_T *);
 void scan_free(OPM_SCAN_T *);
+
 OPM_CONNECTION_T *connection_create();
+void connection_free(OPM_CONNECTION_T *);
 
 void check_establish(OPM_T *);
 void check_poll(OPM_T *);
@@ -186,8 +189,9 @@ void opm_remote_free(OPM_REMOTE_T *remote)
 void opm_free(OPM_T *scanner)
 {
    node_t *p, *next;
-   OPM_PROTOCOL_CONFIG_T *ppc;
 
+   OPM_PROTOCOL_CONFIG_T *ppc;
+   OPM_SCAN_T *scan;
 
    config_free(scanner->config);
 
@@ -199,6 +203,13 @@ void opm_free(OPM_T *scanner)
       node_free(p);
    }
 
+   LIST_FOREACH_SAFE(p, next, scanner->scans->head)
+   {
+      scan = (OPM_SCAN_T *) p->data;
+      scan_free(scan);
+      list_remove(scanner->scans, p);
+   }
+
    list_free(scanner->protocols);
    list_free(scanner->scans);
 
@@ -401,7 +412,18 @@ OPM_SCAN_T *scan_create(OPM_T *scanner, OPM_REMOTE_T *remote)
 
 void scan_free(OPM_SCAN_T *scan)
 {
+   node_t *p, *next;
+   OPM_CONNECTION_T *conn;
+
+   LIST_FOREACH_SAFE(p, next, scan->connections->head)
+   {
+      conn = (OPM_CONNECTION_T *) p->data;
+      connection_free(conn);
+
+      list_remove(scan->connections, p);
+   }
    list_free(scan->connections);
+
    MyFree(scan);
 }
 
index 9b17485a38a657e769bf730ca06c810f281861d1..facac0de483122828d51c4fd7bc7eee0a8524820 100644 (file)
@@ -5,20 +5,20 @@
 #include "opm_types.h"
 #include <unistd.h>
 
-#define NODES 111
-
 void open_proxy(OPM_REMOTE_T *, int);
 void negotiation_failed(OPM_REMOTE_T *, int);
 void timeout(OPM_REMOTE_T *, int);
 void end(OPM_REMOTE_T *, int);
 void handle_error(OPM_REMOTE_T *, int);
 
+int complete = 0;
+
 int main(int argc, char **argv)
 {
    int fdlimit = 1024;
    int scan_port = 6667;
    int max_read = 4096;
-   int scantimeout  = 30;
+   int scantimeout  = 10;
 
    OPM_T *scanner;
    OPM_REMOTE_T *remote;
@@ -30,6 +30,12 @@ int main(int argc, char **argv)
    else
       remote  = opm_remote_create("208.245.162.250");
 
+   if(remote == NULL)
+   {
+      printf("Bad address\n");
+      exit(1);
+   }
+
    /* Setup callbacks */
    remote->fun_openproxy = &open_proxy;
    remote->fun_negfail   = &negotiation_failed;
@@ -54,10 +60,9 @@ int main(int argc, char **argv)
 
    opm_scan(scanner, remote);
 
-   while(1)
+   while(!complete)
       opm_cycle(scanner);
    
-   opm_remote_free(remote);
    opm_free(scanner);
    
    return 0; 
@@ -82,6 +87,7 @@ void end(OPM_REMOTE_T *remote, int notused)
 {
    printf("Scan on %s has ended\n", remote->ip);
    opm_remote_free(remote);
+   complete = 1;
 }
 
 void handle_error(OPM_REMOTE_T *remote, int err)