]> granicus.if.org Git - pgbouncer/commitdiff
immidiate suspend of logged in clients should be done bit differently
authorMarko Kreen <markokr@gmail.com>
Thu, 15 Mar 2007 14:48:48 +0000 (14:48 +0000)
committerMarko Kreen <markokr@gmail.com>
Thu, 15 Mar 2007 14:48:48 +0000 (14:48 +0000)
src/janitor.c
src/janitor.h
src/objects.c

index 57d2d8d851786e50a160a9e5d139557286000362..2840397f791950ce1eb56f3b084178f7e8543d28 100644 (file)
@@ -37,6 +37,18 @@ static void close_server_list(StatList *sk_list, const char *reason)
        }
 }
 
+bool suspend_socket(PgSocket *sk)
+{
+       if (!sk->suspended) {
+               if (sbuf_has_no_state(&sk->sbuf)) {
+                       sbuf_pause(&sk->sbuf);
+                       sk->suspended = 1;
+               } else
+                       return false;
+       }
+       return true;
+}
+
 /* suspend all sockets in socket list */
 static int suspend_socket_list(StatList *list)
 {
@@ -46,13 +58,8 @@ static int suspend_socket_list(StatList *list)
 
        statlist_for_each(item, list) {
                sk = container_of(item, PgSocket, head);
-               if (!sk->suspended) {
-                       if (sbuf_has_no_state(&sk->sbuf)) {
-                               sbuf_pause(&sk->sbuf);
-                               sk->suspended = 1;
-                       } else
-                               active++;
-               }
+               if (!suspend_socket(sk))
+                       active++;
        }
        return active;
 }
index 2c8ccd1380daeb79b2589a3ff44752294253e037..e37c6e1cb9de0eb23fe0eca381833d0f68ee756f 100644 (file)
@@ -20,4 +20,5 @@ void janitor_setup(void);
 void config_postprocess(void);
 void resume_all(void);
 void per_loop_object_maint(void);
+bool suspend_socket(PgSocket *sk);
 
index 7222af348c8930d8aca2d8db64fee74752259be2..e5e857f4a25a01cae8cdba0a49931add9738c578 100644 (file)
@@ -758,7 +758,7 @@ bool finish_client_login(PgSocket *client)
 
        /* in suspend, dont let send query */
        if (cf_pause_mode == P_SUSPEND)
-               pause_client(client);
+               suspend_socket(client);
 
        return true;
 }