]> code.citadel.org Git - citadel.git/blobdiff - citadel/event_client.c
EVENT_CLIENT: when handing over to the DB-Queue, don't re-start IO-Watchers.
[citadel.git] / citadel / event_client.c
index 79a2f0f9c213feb6d4b8517f0de0d7cbef88aae3..d888aa1698c8071f09f8b23ba9c61844071a3b66 100644 (file)
@@ -369,7 +369,22 @@ void PostInbound(AsyncIO *IO)
        case eSendMore:
                assert(IO->SendDone);
                IO->NextState = IO->SendDone(IO);
-               ev_io_start(event_base, &IO->send_event);
+               switch (IO->NextState)
+               {
+               case eSendFile:
+               case eSendReply:
+               case eSendMore:
+               case eReadMessage:
+               case eReadPayload:
+               case eReadMore:
+               case eReadFile:
+                       ev_io_start(event_base, &IO->send_event);
+                       break;
+               case eDBQuery:
+                       StopClientWatchers(IO, 0);
+               default:
+                       break;
+               }
                break;
        case eReadPayload:
        case eReadMore:
@@ -805,7 +820,8 @@ IO_recv_callback(struct ev_loop *loop, ev_io *watcher, int revents)
        if (nbytes > 0) {
                HandleInbound(IO);
        } else if (nbytes == 0) {
-               SetNextTimeout(IO, 0.0);
+               StopClientWatchers(IO, 1);
+               SetNextTimeout(IO, 0.01);
                return;
        } else if (nbytes == -1) {
                if (errno != EAGAIN) {