]> code.citadel.org Git - citadel.git/blobdiff - citadel/modules/eventclient/serv_eventclient.c
EVENT-Q: the IO eventqueue also needs to check the reply of the attach function for...
[citadel.git] / citadel / modules / eventclient / serv_eventclient.c
index f991cf90587480a53b73735a9ab5fe9387c6ce0c..01492e56c437900bed34673196dc484f2908a2a2 100644 (file)
@@ -134,10 +134,10 @@ gotstatus(int nnrun)
                                                CURLINFO_PRIVATE,
                                                &chandle);
                        if (sta) {
-                               EVCURL_syslog(LOG_ERR,
-                                             "error asking curl for private"
-                                             " cookie of curl handle: %s\n",
-                                             curl_easy_strerror(sta));
+                               syslog(LOG_ERR,
+                                      "error asking curl for private"
+                                      " cookie of curl handle: %s\n",
+                                      curl_easy_strerror(sta));
                                continue;
                        }
                        IO = (AsyncIO *)chandle;
@@ -316,10 +316,10 @@ gotwatchsock(CURL *easy,
        if (IO == NULL) {
                sta = curl_easy_getinfo(easy, CURLINFO_PRIVATE, &f);
                if (sta) {
-                       EVCURL_syslog(LOG_ERR,
-                                     "EVCURL: error asking curl for private "
-                                     "cookie of curl handle: %s\n",
-                                     curl_easy_strerror(sta));
+                       CURL_syslog(LOG_ERR,
+                                   "EVCURL: error asking curl for private "
+                                   "cookie of curl handle: %s\n",
+                                   curl_easy_strerror(sta));
                        return -1;
                }
                IO = (AsyncIO *) f;
@@ -593,12 +593,14 @@ pthread_mutex_t EventExitQueueMutex; /* locks the access to the event queue poin
 HashList *QueueEvents = NULL;
 HashList *InboundEventQueue = NULL;
 HashList *InboundEventQueues[2] = { NULL, NULL };
+extern void ShutDownCLient(AsyncIO *IO);
 
 ev_async AddJob;
 ev_async ExitEventLoop;
 
 static void QueueEventAddCallback(EV_P_ ev_async *w, int revents)
 {
+       CitContext *Ctx;
        ev_tstamp Now;
        HashList *q;
        void *v;
@@ -629,8 +631,29 @@ static void QueueEventAddCallback(EV_P_ ev_async *w, int revents)
                if (h->IO->StartIO == 0.0)
                        h->IO->StartIO = Now;
 
+               Ctx = h->IO->CitContext;
+               become_session(Ctx);
+
                h->IO->Now = Now;
-               h->EvAttch(h->IO);
+               switch (h->EvAttch(h->IO))
+               {
+               case eReadMore:
+               case eReadMessage:
+               case eReadFile:
+               case eSendReply:
+               case eSendMore:
+               case eReadPayload:
+               case eSendFile:
+               case eDBQuery:
+               case eSendDNSQuery:
+               case eReadDNSReply:
+               case eConnect:
+                       break;
+               case eTerminateConnection:
+               case eAbort:
+                       ShutDownCLient(h->IO);
+               break;
+               }
        }
        DeleteHashPos(&It);
        DeleteHashContent(&q);
@@ -723,6 +746,7 @@ extern void ShutDownDBCLient(AsyncIO *IO);
 
 static void DBQueueEventAddCallback(EV_P_ ev_async *w, int revents)
 {
+       CitContext *Ctx;
        ev_tstamp Now;
        HashList *q;
        void *v;
@@ -754,6 +778,9 @@ static void DBQueueEventAddCallback(EV_P_ ev_async *w, int revents)
                if (h->IO->StartDB == 0.0)
                        h->IO->StartDB = Now;
                h->IO->Now = Now;
+
+               Ctx = h->IO->CitContext;
+               become_session(Ctx);
                ev_cleanup_start(event_db, &h->IO->db_abort_by_shutdown);
                rc = h->EvAttch(h->IO);
                switch (rc)