projects
/
citadel.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
e62e001
)
EV: stop all watchers before going into other queues - so we can avoid race conditions.
author
Wilfried Goesgens
<dothebart@citadel.org>
Sun, 26 May 2013 13:46:09 +0000
(15:46 +0200)
committer
Wilfried Goesgens
<dothebart@citadel.org>
Sun, 26 May 2013 13:46:09 +0000
(15:46 +0200)
citadel/event_client.c
patch
|
blob
|
history
citadel/event_client.h
patch
|
blob
|
history
citadel/modules/pop3client/serv_pop3client.c
patch
|
blob
|
history
citadel/modules/rssclient/serv_rssclient.c
patch
|
blob
|
history
citadel/modules/smtp/serv_smtpeventclient.c
patch
|
blob
|
history
diff --git
a/citadel/event_client.c
b/citadel/event_client.c
index 68995ddf7153401a26f8aa7222285959b33f16ca..c9c149f8e156fa002493565a05943d27fd2e7233 100644
(file)
--- a/
citadel/event_client.c
+++ b/
citadel/event_client.c
@@
-295,6
+295,17
@@
eNextState QueueEventContext(AsyncIO *IO, IO_CallBack CB)
return eSendReply;
}
return eSendReply;
}
+eNextState EventQueueDBOperation(AsyncIO *IO, IO_CallBack CB)
+{
+ StopClientWatchers(IO, 0);
+ return QueueDBOperation(IO, CB);
+}
+eNextState DBQueueEventContext(AsyncIO *IO, IO_CallBack CB)
+{
+ StopDBWatchers(IO);
+ return QueueEventContext(IO, CB);
+}
+
extern eNextState evcurl_handle_start(AsyncIO *IO);
eNextState QueueCurlContext(AsyncIO *IO)
extern eNextState evcurl_handle_start(AsyncIO *IO);
eNextState QueueCurlContext(AsyncIO *IO)
@@
-334,6
+345,13
@@
eNextState QueueCurlContext(AsyncIO *IO)
return eSendReply;
}
return eSendReply;
}
+eNextState CurlQueueDBOperation(AsyncIO *IO, IO_CallBack CB)
+{
+ StopCurlWatchers(IO);
+ return QueueDBOperation(IO, CB);
+}
+
+
void DestructCAres(AsyncIO *IO);
void FreeAsyncIOContents(AsyncIO *IO)
{
void DestructCAres(AsyncIO *IO);
void FreeAsyncIOContents(AsyncIO *IO)
{
diff --git
a/citadel/event_client.h
b/citadel/event_client.h
index 1dce3d9cc721b469594693ef706e03cc1122a28e..b136c2e670a975d1516398c235fe18c347d82967 100644
(file)
--- a/
citadel/event_client.h
+++ b/
citadel/event_client.h
@@
-278,9
+278,11
@@
void FreeAsyncIOContents(AsyncIO *IO);
eNextState NextDBOperation(AsyncIO *IO, IO_CallBack CB);
eNextState QueueDBOperation(AsyncIO *IO, IO_CallBack CB);
eNextState NextDBOperation(AsyncIO *IO, IO_CallBack CB);
eNextState QueueDBOperation(AsyncIO *IO, IO_CallBack CB);
+eNextState EventQueueDBOperation(AsyncIO *IO, IO_CallBack CB);
void StopDBWatchers(AsyncIO *IO);
eNextState QueueEventContext(AsyncIO *IO, IO_CallBack CB);
eNextState QueueCurlContext(AsyncIO *IO);
void StopDBWatchers(AsyncIO *IO);
eNextState QueueEventContext(AsyncIO *IO, IO_CallBack CB);
eNextState QueueCurlContext(AsyncIO *IO);
+eNextState DBQueueEventContext(AsyncIO *IO, IO_CallBack CB);
eNextState EvConnectSock(AsyncIO *IO,
double conn_timeout,
eNextState EvConnectSock(AsyncIO *IO,
double conn_timeout,
@@
-342,6
+344,7
@@
int InitcURLIOStruct(AsyncIO *IO,
void KillAsyncIOContext(AsyncIO *IO);
void StopCurlWatchers(AsyncIO *IO);
void KillAsyncIOContext(AsyncIO *IO);
void StopCurlWatchers(AsyncIO *IO);
+eNextState CurlQueueDBOperation(AsyncIO *IO, IO_CallBack CB);
eNextState ReAttachIO(AsyncIO *IO,
void *pData,
eNextState ReAttachIO(AsyncIO *IO,
void *pData,
diff --git
a/citadel/modules/pop3client/serv_pop3client.c
b/citadel/modules/pop3client/serv_pop3client.c
index e23f9b1ed0e90d7af4583fa061757c3124e73f72..8a12d15037402f33a7d000665b0b9a577e0053aa 100644
(file)
--- a/
citadel/modules/pop3client/serv_pop3client.c
+++ b/
citadel/modules/pop3client/serv_pop3client.c
@@
-454,8
+454,7
@@
eNextState POP3_FetchNetworkUsetableEntry(AsyncIO *IO)
/* ok, now we know them all,
* continue with reading the actual messages. */
DeleteHashPos(&RecvMsg->Pos);
/* ok, now we know them all,
* continue with reading the actual messages. */
DeleteHashPos(&RecvMsg->Pos);
- StopDBWatchers(IO);
- return QueueEventContext(IO, POP3_C_ReAttachToFetchMessages);
+ return DBQueueEventContext(IO, POP3_C_ReAttachToFetchMessages);
}
}
}
}
@@
-492,8
+491,8
@@
eNextState POP3C_GetOneMessagID(pop3aggr *RecvMsg)
DeleteHashPos(&RecvMsg->Pos);
/// done receiving uidls.. start looking them up now.
RecvMsg->Pos = GetNewHashPos(RecvMsg->MsgNumbers, 0);
DeleteHashPos(&RecvMsg->Pos);
/// done receiving uidls.. start looking them up now.
RecvMsg->Pos = GetNewHashPos(RecvMsg->MsgNumbers, 0);
- return QueueDBOperation(&RecvMsg->IO,
- POP3_FetchNetworkUsetableEntry);
+ return
Event
QueueDBOperation(&RecvMsg->IO,
+
POP3_FetchNetworkUsetableEntry);
}
return eReadMore; /* TODO */
}
}
return eReadMore; /* TODO */
}
@@
-595,8
+594,7
@@
eNextState POP3C_StoreMsgRead(AsyncIO *IO)
eWrite,
IO->ID, CCID);
eWrite,
IO->ID, CCID);
- StopDBWatchers(IO);
- return QueueEventContext(&RecvMsg->IO, POP3_C_ReAttachToFetchMessages);
+ return DBQueueEventContext(&RecvMsg->IO, POP3_C_ReAttachToFetchMessages);
}
eNextState POP3C_SaveMsg(AsyncIO *IO)
{
}
eNextState POP3C_SaveMsg(AsyncIO *IO)
{
@@
-627,8
+625,7
@@
eNextState POP3C_ReadMessageBody(pop3aggr *RecvMsg)
EVP3CM_syslog(LOG_DEBUG, "Converting message...");
RecvMsg->CurrMsg->Msg =
convert_internet_message_buf(&RecvMsg->IO.ReadMsg->MsgBuf);
EVP3CM_syslog(LOG_DEBUG, "Converting message...");
RecvMsg->CurrMsg->Msg =
convert_internet_message_buf(&RecvMsg->IO.ReadMsg->MsgBuf);
- StopClientWatchers(IO, 0);
- return QueueDBOperation(&RecvMsg->IO, POP3C_SaveMsg);
+ return EventQueueDBOperation(&RecvMsg->IO, POP3C_SaveMsg);
}
eNextState POP3C_SendDelete(pop3aggr *RecvMsg)
}
eNextState POP3C_SendDelete(pop3aggr *RecvMsg)
diff --git
a/citadel/modules/rssclient/serv_rssclient.c
b/citadel/modules/rssclient/serv_rssclient.c
index dfed6bc992d878905ef5b9c00ec91a5e64d46979..5f1357603df48ffdb838948c6f301a4e5fa308a6 100644
(file)
--- a/
citadel/modules/rssclient/serv_rssclient.c
+++ b/
citadel/modules/rssclient/serv_rssclient.c
@@
-592,7
+592,7
@@
eNextState RSSAggregator_AnalyseReply(AsyncIO *IO)
eNextState RSSAggregator_FinishHttp(AsyncIO *IO)
{
StopCurlWatchers(IO);
eNextState RSSAggregator_FinishHttp(AsyncIO *IO)
{
StopCurlWatchers(IO);
- return QueueDBOperation(IO, RSSAggregator_AnalyseReply);
+ return
Curl
QueueDBOperation(IO, RSSAggregator_AnalyseReply);
}
/*
}
/*
diff --git
a/citadel/modules/smtp/serv_smtpeventclient.c
b/citadel/modules/smtp/serv_smtpeventclient.c
index dd4e3e2662b08a05a10784a4e36ee4a26dda378f..afdde7dad1e229a5b8f60708fe3a8781f7a976f3 100644
(file)
--- a/
citadel/modules/smtp/serv_smtpeventclient.c
+++ b/
citadel/modules/smtp/serv_smtpeventclient.c
@@
-254,7
+254,7
@@
eNextState Terminate(AsyncIO *IO)
eNextState FinalizeMessageSend(SmtpOutMsg *Msg)
{
/* hand over to DB Queue */
eNextState FinalizeMessageSend(SmtpOutMsg *Msg)
{
/* hand over to DB Queue */
- return QueueDBOperation(&Msg->IO, FinalizeMessageSend_DB);
+ return
Event
QueueDBOperation(&Msg->IO, FinalizeMessageSend_DB);
}
eNextState FailOneAttempt(AsyncIO *IO)
}
eNextState FailOneAttempt(AsyncIO *IO)