summaryrefslogtreecommitdiff
path: root/server/src/client_connection.cc
diff options
context:
space:
mode:
authorBent Bisballe Nyeng <deva@aasimon.org>2011-11-28 15:03:17 +0100
committerBent Bisballe Nyeng <deva@aasimon.org>2011-11-28 15:03:17 +0100
commit2a89f766b3c4917001de03a06bfbecb1ce25675f (patch)
tree03f2e68488a5dad0619651c771912e8759fddfdc /server/src/client_connection.cc
parentdd1fb6e16ff777d3e098076d1015c6c565b51bb7 (diff)
Use one-thread-per-connection and fix up Session locking.
Diffstat (limited to 'server/src/client_connection.cc')
-rw-r--r--server/src/client_connection.cc15
1 files changed, 10 insertions, 5 deletions
diff --git a/server/src/client_connection.cc b/server/src/client_connection.cc
index fe55efc..075dc46 100644
--- a/server/src/client_connection.cc
+++ b/server/src/client_connection.cc
@@ -44,7 +44,7 @@ static std::string error_box(std::string message)
static bool did_commit = false;
#endif
-ClientConnection::ClientConnection(Environment &e, headers_t &headers,
+ClientConnection::ClientConnection(Environment &e, headers_t headers,
headers_t args, std::string uri)
: env(e), parser(&transaction)
{
@@ -154,17 +154,22 @@ bool ClientConnection::handle(const char *data, size_t size)
}
Session *session = NULL;
+ SessionAutounlock l(&session);
+
try {
if(sessionid == "") {
// Create new session
- session = env.sessions.newSession(patientid, templ);
+ // NOTE: New session is returned in locked state!
+ session = env.sessions.newLockedSession(patientid, templ);
} else {
// Attach to old session
- session = env.sessions.session(sessionid);
+ // NOTE: Returned session is returned in locked state!
+ session = env.sessions.lockedSession(sessionid);
// Session didn't exist - create a new one anyway.
if(session == NULL) {
- session = env.sessions.newSession(patientid, templ);
+ // NOTE: New session is returned in locked state!
+ session = env.sessions.newLockedSession(patientid, templ);
}
}
} catch(Sessions::SessionAlreadyActive &e) {
@@ -201,7 +206,7 @@ bool ClientConnection::handle(const char *data, size_t size)
parser_complete = true;
{
- SessionAutolock lock(*session);
+ //SessionAutolock lock(session);
response = handleTransaction(request, transaction, env, *session);
}