changeset 1082:7c32c7d15928

error: store scgi connection id in a thread-local variable Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
author Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
date Wed, 30 Aug 2017 15:19:09 +0300
parents b8ae4fd66635
children c8d534dfe4df
files debug.h error.c req.c
diffstat 3 files changed, 14 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/debug.h	Wed Aug 30 15:15:36 2017 +0300
+++ b/debug.h	Wed Aug 30 15:19:09 2017 +0300
@@ -28,6 +28,8 @@
 
 #define DBG(...)	cmn_err(CE_DEBUG, __VA_ARGS__)
 
+extern void set_session(uint32_t id);
+
 extern struct jeffpc_ops init_ops;
 
 #endif
--- a/error.c	Wed Aug 30 15:15:36 2017 +0300
+++ b/error.c	Wed Aug 30 15:19:09 2017 +0300
@@ -26,6 +26,9 @@
 #include <syslog.h>
 #include <stdarg.h>
 
+/* session info */
+static __thread uint32_t session_id;
+
 static void mylog(int level, const char *fmt, va_list ap)
 {
 	char msg[512];
@@ -38,6 +41,11 @@
 	syslog(LOG_LOCAL0 | level, "%s", msg);
 }
 
+void set_session(uint32_t id)
+{
+	session_id = id;
+}
+
 struct jeffpc_ops init_ops = {
 	.log = mylog,
 };
--- a/req.c	Wed Aug 30 15:15:36 2017 +0300
+++ b/req.c	Wed Aug 30 15:19:09 2017 +0300
@@ -48,6 +48,8 @@
 
 void req_init(struct req *req, struct scgi *scgi)
 {
+	set_session(scgi->id);
+
 	memset(req, 0, sizeof(struct req));
 
 	req->scgi = scgi;
@@ -221,6 +223,8 @@
 	log_request(req);
 
 	vars_destroy(&req->vars);
+
+	set_session(0);
 }
 
 void req_head(struct req *req, const char *name, const char *val)