summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/afb-session.c26
-rw-r--r--src/afb-session.h1
-rw-r--r--src/afb-trace.c13
3 files changed, 29 insertions, 11 deletions
diff --git a/src/afb-session.c b/src/afb-session.c
index e1d5a458..a28a35f6 100644
--- a/src/afb-session.c
+++ b/src/afb-session.c
@@ -284,6 +284,7 @@ error:
return NULL;
}
+/* Creates a new session with 'timeout' */
struct afb_session *afb_session_create (int timeout)
{
time_t now;
@@ -295,7 +296,19 @@ struct afb_session *afb_session_create (int timeout)
return make_session(NULL, timeout, now);
}
-// This function will return exiting session or newly created session
+/* Searchs the session of 'uuid' */
+struct afb_session *afb_session_search (const char *uuid)
+{
+ time_t now;
+
+ /* cleaning */
+ now = NOW;
+ cleanup (now);
+ return search(uuid);
+
+}
+
+/* This function will return exiting session or newly created session */
struct afb_session *afb_session_get (const char *uuid, int *created)
{
struct afb_session *session;
@@ -308,20 +321,21 @@ struct afb_session *afb_session_get (const char *uuid, int *created)
/* search for an existing one not too old */
if (uuid != NULL) {
session = search(uuid);
- if (!created)
- return session;
if (session != NULL) {
- *created = 0;
+ if (created)
+ *created = 0;
session->access = now;
session->refcount++;
return session;
}
}
+ /* no existing session found, create it */
+ session = make_session(uuid, sessions.timeout, now);
if (created)
- *created = 1;
+ *created = !!session;
- return make_session(uuid, sessions.timeout, now);
+ return session;
}
struct afb_session *afb_session_addref(struct afb_session *session)
diff --git a/src/afb-session.h b/src/afb-session.h
index c76d6769..a8009bfd 100644
--- a/src/afb-session.h
+++ b/src/afb-session.h
@@ -23,6 +23,7 @@ extern void afb_session_init(int max_session_count, int timeout, const char *ini
extern const char *afb_session_initial_token();
extern struct afb_session *afb_session_create (int timeout);
+extern struct afb_session *afb_session_search (const char *uuid);
extern struct afb_session *afb_session_get (const char *uuid, int *created);
extern const char *afb_session_uuid (struct afb_session *session);
diff --git a/src/afb-trace.c b/src/afb-trace.c
index cefd2058..eb1122d4 100644
--- a/src/afb-trace.c
+++ b/src/afb-trace.c
@@ -1122,12 +1122,15 @@ static void *session_open(void *closure)
static struct afb_session *trace_get_session_by_uuid(struct afb_trace *trace, const char *uuid, int alloc)
{
struct cookie cookie;
- int created;
- cookie.session = afb_session_get(uuid, alloc ? &created : NULL);
- if (cookie.session) {
- cookie.trace = trace;
- afb_session_cookie(cookie.session, cookie.trace, session_open, session_closed, &cookie, 0);
+ if (!alloc)
+ cookie.session = afb_session_search(uuid);
+ else {
+ cookie.session = afb_session_get(uuid, NULL);
+ if (cookie.session) {
+ cookie.trace = trace;
+ afb_session_cookie(cookie.session, cookie.trace, session_open, session_closed, &cookie, 0);
+ }
}
return cookie.session;
}