Use gmtime_r instead of gmtime and localtime_r instead of localtime

gmtime isn't thread safe in general. In msvcrt (which lacks gmtime_r),
the buffer used by gmtime is thread specific though.

One call to localtime is left in avconv_opt.c, where thread safety
shouldn't matter (instead of making avconv depend on the libavutil
internal header).

Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
Martin Storsjö
2014-10-24 10:46:36 +03:00
parent 3f8f1c6ff2
commit 82ee7d0dda
4 changed files with 17 additions and 9 deletions

View File

@@ -29,6 +29,7 @@
#include "eval.h"
#include "log.h"
#include "random_seed.h"
#include "time_internal.h"
#include "parseutils.h"
typedef struct {
@@ -483,7 +484,7 @@ int av_parse_time(int64_t *timeval, const char *timestr, int duration)
{
const char *p;
int64_t t;
struct tm dt = { 0 };
struct tm dt = { 0 }, tmbuf;
int i;
static const char * const date_fmt[] = {
"%Y-%m-%d",
@@ -527,9 +528,9 @@ int av_parse_time(int64_t *timeval, const char *timestr, int duration)
* current year-month-day time */
if (!q) {
if (is_utc) {
dt = *gmtime(&now);
dt = *gmtime_r(&now, &tmbuf);
} else {
dt = *localtime(&now);
dt = *localtime_r(&now, &tmbuf);
}
dt.tm_hour = dt.tm_min = dt.tm_sec = 0;
} else {