EVENT: we memset the context, remember & re-set the ID so we can find the earlier...
[citadel.git] / citadel / event_client.c
index 6b39829f9285f736507e952c66ad463df21faef4..90c5e5dd986619f4f9f5426bea3393133a9cb7c1 100644 (file)
@@ -370,7 +370,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:
@@ -581,7 +596,7 @@ IO_send_callback(struct ev_loop *loop, ev_io *watcher, int revents)
                if (errno != EAGAIN) {
                        StopClientWatchers(IO, 1);
                        EV_syslog(LOG_DEBUG,
-                                 "EVENT: Socket Invalid! [%d] [%s] [%d]\n",
+                                 "IO_send_callback(): Socket Invalid! [%d] [%s] [%d]\n",
                                  errno, strerror(errno), IO->SendBuf.fd);
                        StrBufPrintf(IO->ErrMsg,
                                     "Socket Invalid! [%s]",
@@ -814,7 +829,7 @@ IO_recv_callback(struct ev_loop *loop, ev_io *watcher, int revents)
                        // FD is gone. kick it. 
                        StopClientWatchers(IO, 1);
                        EV_syslog(LOG_DEBUG,
-                                 "EVENT: Socket Invalid! [%d] [%s] [%d]\n",
+                                 "IO_recv_callback(): Socket Invalid! [%d] [%s] [%d]\n",
                                  errno, strerror(errno), IO->SendBuf.fd);
                        StrBufPrintf(IO->ErrMsg,
                                     "Socket Invalid! [%s]",
@@ -1039,7 +1054,7 @@ void InitIOStruct(AsyncIO *IO,
        IO->Data          = Data;
 
        IO->CitContext    = CloneContext(CC);
-       IO->CitContext->session_specific_data = (char*) Data;
+       IO->CitContext->session_specific_data = Data;
        IO->CitContext->IO = IO;
 
        IO->NextState     = NextState;
@@ -1077,7 +1092,7 @@ int InitcURLIOStruct(AsyncIO *IO,
        IO->Data          = Data;
 
        IO->CitContext    = CloneContext(CC);
-       IO->CitContext->session_specific_data = (char*) Data;
+       IO->CitContext->session_specific_data = Data;
        IO->CitContext->IO = IO;
 
        IO->SendDone      = SendDone;
@@ -1100,10 +1115,13 @@ typedef struct KillOtherSessionContext {
 
 eNextState KillTerminate(AsyncIO *IO)
 {
+       long id;
        KillOtherSessionContext *Ctx = (KillOtherSessionContext*)IO->Data;
        EV_syslog(LOG_DEBUG, "%s Exit\n", __FUNCTION__);
+       id = IO->ID;
        FreeAsyncIOContents(IO);
        memset(Ctx, 0, sizeof(KillOtherSessionContext));
+       IO->ID = id; /* just for the case we want to analyze it in a coredump */
        free(Ctx);
        return eAbort;