fix leaking connections by calling destructor instead closing the fd 0.1pre
authorChristian Thaeter <ct@pipapo.org>
Mon, 8 Oct 2007 18:03:19 +0000 (20:03 +0200)
committerChristian Thaeter <ct@pipapo.org>
Mon, 8 Oct 2007 18:03:19 +0000 (20:03 +0200)
rxpd.c

diff --git a/rxpd.c b/rxpd.c
index 5bb75e2..183aa1b 100644 (file)
--- a/rxpd.c
+++ b/rxpd.c
@@ -467,13 +467,13 @@ rxpd_connection_delete (struct rxpd_connection* self)
   if (self)
     {
       event_del (&self->ev);
+      close (self->fd);
       free (self->tmp_str);
       LLIST_WHILE_HEAD (&self->tmp_list, n)
         {
           struct rxpd_rule* node = (struct rxpd_rule*)n;
           rxpd_rule_delete (node);
         }
-      close (self->fd);
     }
   free (self);
 }
@@ -596,7 +596,7 @@ rxpd_connection_cmd_CHECK (int fd, short event, void* ptr)
   else if (!self->file)
     {
       rxpd_buffer_printf (&self->out, "#ERROR: no such file\n");
-      close (fd);
+      rxpd_connection_delete (self);
       return;
     }
 
@@ -606,7 +606,7 @@ rxpd_connection_cmd_CHECK (int fd, short event, void* ptr)
     {
       if (rxpd_buffer_state (&self->in) == RXPD_ERROR)
         rxpd_buffer_printf (&self->out, "#ERROR:\n");
-      close (fd);
+      rxpd_connection_delete (self);
     }
 }
 
@@ -639,7 +639,7 @@ rxpd_connection_APPEND_PREPEND_helper (int fd, short event, void* ptr, int do_ap
   else if (!event && !self->file)
     {
       rxpd_buffer_printf (&self->out, "#ERROR: no such file\n");
-      close (fd);
+      rxpd_connection_delete (self);
       return;
     }
 
@@ -660,7 +660,7 @@ rxpd_connection_APPEND_PREPEND_helper (int fd, short event, void* ptr, int do_ap
         llist_insertlist_prev (&self->file->rules, &self->tmp_list);
       else
         llist_insertlist_next (&self->file->rules, &self->tmp_list);
-      close (fd);
+      rxpd_connection_delete (self);
     }
 }
 
@@ -819,7 +819,7 @@ rxpd_connection_cmd_LOAD (int fd, short event, void* ptr)
         }
       else
         rxpd_buffer_printf (&self->out, "#ERROR: no such file\n");
-      close (fd);
+      rxpd_connection_delete (self);
     }
 }
 
@@ -843,7 +843,7 @@ rxpd_connection_cmd_SAVE (int fd, short event, void* ptr)
         }
       else
         rxpd_buffer_printf (&self->out, "#ERROR: no such file\n");
-      close (fd);
+      rxpd_connection_delete (self);
     }
 }
 
@@ -855,7 +855,7 @@ rxpd_connection_cmd_DUMP (int fd, short event, void* ptr)
   if (!event && !self->file)
     {
       rxpd_buffer_printf (&self->out, "#ERROR: no such file\n");
-      close (fd);
+      rxpd_connection_delete (self);
       return;
     }
 
@@ -870,7 +870,7 @@ rxpd_connection_cmd_DUMP (int fd, short event, void* ptr)
         }
     }
 
-  close (fd);
+  rxpd_connection_delete (self);
 }
 
 
@@ -898,7 +898,7 @@ rxpd_connection_cmd_LIST (int fd, short event, void* ptr)
   else
     psplay_walk (&self->base->files, NULL, walk_LIST, 0, ptr);
 
-  close (fd);
+  rxpd_connection_delete (self);
 }
 
 void
@@ -912,5 +912,5 @@ rxpd_connection_cmd_SHUTDOWN (int fd, short event, void* ptr)
       rxpd_socket_delete (socket);
     }
   rxpd_buffer_printf (&self->out, "#OK:\n");
-  close (fd);
+  rxpd_connection_delete (self);
 }