projects
/
citadel.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
6729009
)
CONTEXT: add interlock with cleanup / attaching of sessions.
author
Wilfried Goesgens
<dothebart@citadel.org>
Tue, 29 Jan 2013 23:23:29 +0000
(
00:23
+0100)
committer
Wilfried Goesgens
<dothebart@citadel.org>
Tue, 29 Jan 2013 23:23:29 +0000
(
00:23
+0100)
webcit/context_loop.c
patch
|
blob
|
history
diff --git
a/webcit/context_loop.c
b/webcit/context_loop.c
index ff95e825ebe5ad428d604b610d8621ae6a6a327f..6fab115fad22bd156cf7779246561840d184de2b 100644
(file)
--- a/
webcit/context_loop.c
+++ b/
webcit/context_loop.c
@@
-58,6
+58,7
@@
void do_housekeeping(void)
{
wcsession *sptr, *ss;
wcsession *sessions_to_kill = NULL;
{
wcsession *sptr, *ss;
wcsession *sessions_to_kill = NULL;
+ time_t the_time;
/*
* Lock the session list, moving any candidates for euthanasia into
/*
* Lock the session list, moving any candidates for euthanasia into
@@
-65,9
+66,12
@@
void do_housekeeping(void)
*/
CtdlLogResult(pthread_mutex_lock(&SessionListMutex));
for (sptr = SessionList; sptr != NULL; sptr = sptr->next) {
*/
CtdlLogResult(pthread_mutex_lock(&SessionListMutex));
for (sptr = SessionList; sptr != NULL; sptr = sptr->next) {
-
+ if (the_time == 0)
+ the_time = time(NULL);
/* Kill idle sessions */
/* Kill idle sessions */
- if ((time(NULL) - (sptr->lastreq)) > (time_t) WEBCIT_TIMEOUT) {
+ if ((sptr->inuse == 0) &&
+ ((the_time - (sptr->lastreq)) > (time_t) WEBCIT_TIMEOUT))
+ {
syslog(3, "Timeout session %d", sptr->wc_session);
sptr->killthis = 1;
}
syslog(3, "Timeout session %d", sptr->wc_session);
sptr->killthis = 1;
}
@@
-560,7
+564,7
@@
void context_loop(ParsedHttpHdrs *Hdr)
/*
* If there were no qualifying sessions, then create a new one.
*/
/*
* If there were no qualifying sessions, then create a new one.
*/
- if (
TheSession == NULL
) {
+ if (
(TheSession == NULL) || (TheSession->killthis != 0)
) {
TheSession = CreateSession(1, 0, &SessionList, Hdr, &SessionListMutex);
}
TheSession = CreateSession(1, 0, &SessionList, Hdr, &SessionListMutex);
}