yaid.c (cancel_proxy): Reorder destruction a little.
[yaid] / yaid.c
diff --git a/yaid.c b/yaid.c
index 232a779..cc3bb47 100644 (file)
--- a/yaid.c
+++ b/yaid.c
@@ -298,7 +298,8 @@ static void done_client_write(int err, void *p)
 /* Format the message FMT and queue it to be sent to the client.  Client
  * input will be disabled until the write completes.
  */
-static void write_to_client(struct client *c, const char *fmt, ...)
+static void PRINTF_LIKE(2, 3)
+  write_to_client(struct client *c, const char *fmt, ...)
 {
   va_list ap;
   char buf[WRBUFSZ];
@@ -364,8 +365,8 @@ static void cancel_proxy(struct proxy *px)
     selbuf_destroy(&px->b);
     free_writebuf(&px->wb);
   }
-  selbuf_enable(&px->c->b);
   px->c->px = 0;
+  selbuf_enable(&px->c->b);
   xfree(px);
 }
 
@@ -632,6 +633,7 @@ static void client_line(char *line, size_t len, void *p)
   int i, t;
 
   /* If the connection has closed, then tidy stuff away. */
+  c->q.s[R].addr = c->raddr;
   c->q.s[L].port = c->q.s[R].port = 0;
   if (!line) {
     disconnect_client(c);
@@ -657,7 +659,6 @@ static void client_line(char *line, size_t len, void *p)
   skipws(&q); if (*q) goto bad;
 
   /* Identify the connection.  Act on the result. */
-  c->q.s[R].addr = c->raddr;
   identify(&c->q);
   switch (c->q.resp) {
 
@@ -909,7 +910,7 @@ static int make_listening_socket(const struct addrops *ao, int port)
 }
 
 /* Quit because of a fatal signal. */
-static void quit(int sig, void *p)
+static void NORETURN quit(int sig, void *p)
 {
   const char *signame = p;