Module: kamailio Branch: master Commit: dc2acb895538131e99c770da6f7448cb5a46fc32 URL: https://github.com/kamailio/kamailio/commit/dc2acb895538131e99c770da6f7448cb...
Author: Henning Westerholt hw@skalatan.de Committer: Henning Westerholt hw@skalatan.de Date: 2019-09-19T23:49:32+02:00
core: replace glibc time function calls with the thread-safe versions
- replace glibc time function calls with the thread-safe versions, to prevent race conditions from multi-process / multi-threaded access - used in 'kamcmd core.uptime' rpc cmd, no functional change, locally tested
---
Modified: src/core/core_cmd.c
---
Diff: https://github.com/kamailio/kamailio/commit/dc2acb895538131e99c770da6f7448cb... Patch: https://github.com/kamailio/kamailio/commit/dc2acb895538131e99c770da6f7448cb...
---
diff --git a/src/core/core_cmd.c b/src/core/core_cmd.c index 5b1c4624ed..717e240fde 100644 --- a/src/core/core_cmd.c +++ b/src/core/core_cmd.c @@ -224,8 +224,7 @@ static const char* dst_blst_stats_get_doc[] = { #endif
- -#define MAX_CTIME_LEN 128 +#define MAX_CTIME_LEN 25
/* up time */ static char up_since_ctime[MAX_CTIME_LEN]; @@ -381,13 +380,14 @@ static void core_uptime(rpc_t* rpc, void* c) { void* s; time_t now; + char buf[MAX_CTIME_LEN]; str snow; + snow.s = buf;
time(&now);
if (rpc->add(c, "{", &s) < 0) return; - snow.s = ctime(&now); - if(snow.s) { + if(ctime_r(&now, snow.s)) { snow.len = strlen(snow.s); if(snow.len>2 && snow.s[snow.len-1]=='\n') snow.len--; rpc->struct_add(s, "S", "now", &snow); @@ -1187,21 +1187,14 @@ int register_core_rpcs(void)
int rpc_init_time(void) { - char *t; - t=ctime(&up_since); - if (strlen(t)+1>=MAX_CTIME_LEN) { - ERR("Too long data %d\n", (int)strlen(t)); + char t[MAX_CTIME_LEN]; + int len; + if (! ctime_r(&up_since, t)) { + ERR("Invalid time value\n"); return -1; } strcpy(up_since_ctime, t); - t = up_since_ctime + strlen(up_since_ctime); - while(t>up_since_ctime) { - if(*t=='\0' || *t=='\r' || *t=='\n') { - *t = '\0'; - } else { - break; - } - t--; - } + len = strlen(up_since_ctime); + if(len>2 && up_since_ctime[len-1]=='\n') up_since_ctime[len-1]='\0'; return 0; }