From fdb9c5e6dc41dcb8ac7f1c6ed0b2e452ff3044d2 Mon Sep 17 00:00:00 2001 From: Mark Riddoch Date: Wed, 3 Dec 2014 09:53:17 +0000 Subject: [PATCH] Switch to thread safe versions of localtime and asctime --- server/core/server.c | 4 +++- server/core/service.c | 17 +++++++++++------ server/core/session.c | 20 +++++++++++++++----- 3 files changed, 29 insertions(+), 12 deletions(-) diff --git a/server/core/server.c b/server/core/server.c index e4cb0e114..61a3bdb3d 100644 --- a/server/core/server.c +++ b/server/core/server.c @@ -344,8 +344,10 @@ SERVER_PARAM *param; } } if (server->node_ts > 0) { + struct tm result; + char buf[40]; dcb_printf(dcb, "\tLast Repl Heartbeat:\t%s", - asctime(localtime(&server->node_ts))); + asctime_r(localtime_r((time_t *)(&server->node_ts), &result), buf)); } if ((param = server->parameters) != NULL) { diff --git a/server/core/service.c b/server/core/service.c index 708789f32..4ef101085 100644 --- a/server/core/service.c +++ b/server/core/service.c @@ -809,13 +809,16 @@ SERVICE *service; void printService(SERVICE *service) { -SERVER *ptr = service->databases; -int i; +SERVER *ptr = service->databases; +struct tm result; +char time_buf[30]; +int i; printf("Service %p\n", service); printf("\tService: %s\n", service->name); printf("\tRouter: %s (%p)\n", service->routerModule, service->router); - printf("\tStarted: %s", asctime(localtime(&service->stats.started))); + printf("\tStarted: %s", + asctime_r(localtime_r(&service->stats.started, &result), time_buf)); printf("\tBackend databases\n"); while (ptr) { @@ -887,8 +890,10 @@ SERVICE *ptr; */ void dprintService(DCB *dcb, SERVICE *service) { -SERVER *server = service->databases; -int i; +SERVER *server = service->databases; +struct tm result; +char timebuf[30]; +int i; dcb_printf(dcb, "Service %p\n", service); dcb_printf(dcb, "\tService: %s\n", @@ -898,7 +903,7 @@ int i; if (service->router) service->router->diagnostics(service->router_instance, dcb); dcb_printf(dcb, "\tStarted: %s", - asctime(localtime(&service->stats.started))); + asctime_r(localtime_r(&service->stats.started, &result), timebuf)); dcb_printf(dcb, "\tRoot user access: %s\n", service->enable_root ? "Enabled" : "Disabled"); if (service->n_filters) diff --git a/server/core/session.c b/server/core/session.c index 3369e05bd..031780012 100644 --- a/server/core/session.c +++ b/server/core/session.c @@ -465,11 +465,15 @@ int rval = 0; void printSession(SESSION *session) { +struct tm result; +char timebuf[40]; + printf("Session %p\n", session); printf("\tState: %s\n", session_state(session->state)); printf("\tService: %s (%p)\n", session->service->name, session->service); printf("\tClient DCB: %p\n", session->client); - printf("\tConnected: %s", asctime(localtime(&session->stats.connect))); + printf("\tConnected: %s", + asctime_r(localtime_r(&session->stats.connect, &result), timebuf)); } /** @@ -566,7 +570,9 @@ int norouter = 0; void dprintAllSessions(DCB *dcb) { -SESSION *ptr; +struct tm result; +char timebuf[40]; +SESSION *ptr; spinlock_acquire(&session_spin); ptr = allSessions; @@ -578,7 +584,8 @@ SESSION *ptr; dcb_printf(dcb, "\tClient DCB: %p\n", ptr->client); if (ptr->client && ptr->client->remote) dcb_printf(dcb, "\tClient Address: %s\n", ptr->client->remote); - dcb_printf(dcb, "\tConnected: %s", asctime(localtime(&ptr->stats.connect))); + dcb_printf(dcb, "\tConnected: %s", + asctime_r(localtime_r(&ptr->stats.connect, &result), timebuf)); ptr = ptr->next; } spinlock_release(&session_spin); @@ -596,7 +603,9 @@ SESSION *ptr; void dprintSession(DCB *dcb, SESSION *ptr) { -int i; +struct tm result; +char buf[30]; +int i; dcb_printf(dcb, "Session %d (%p)\n",ptr->ses_id, ptr); dcb_printf(dcb, "\tState: %s\n", session_state(ptr->state)); @@ -604,7 +613,8 @@ int i; dcb_printf(dcb, "\tClient DCB: %p\n", ptr->client); if (ptr->client && ptr->client->remote) dcb_printf(dcb, "\tClient Address: %s\n", ptr->client->remote); - dcb_printf(dcb, "\tConnected: %s", asctime(localtime(&ptr->stats.connect))); + dcb_printf(dcb, "\tConnected: %s", + asctime_r(localtime_r(&ptr->stats.connect, &result), buf)); if (ptr->n_filters) { for (i = 0; i < ptr->n_filters; i++)