]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
#execing the same file multiple times led to warning messages saying that the same...
authorMark Michelson <mmichelson@digium.com>
Mon, 5 May 2008 22:14:06 +0000 (22:14 +0000)
committerMark Michelson <mmichelson@digium.com>
Mon, 5 May 2008 22:14:06 +0000 (22:14 +0000)
being #included twice. This was due to the fact that #exec created a temporary file which
was then #included. The name of the temporary file was the name of the #exec'd file, with
the Unix timestamp and thread ID concatenated. The issue was that if multiple #exec statements
of the same file were reached in the same second, then the result was that the temporary files
would have duplicate names. To resolve this, the temporary file now has microsecond resolution
for the timestamp portion.

(closes issue #12574)
Reported by: jmls
Patches:
      12574.patch uploaded by putnopvut (license 60)
Tested by: jmls, putnopvut

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@115329 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/config.c

index 9f5fdc617b02a50adedc9cb56541bedf7bd6793f..2d707183c4fed88716c9f6b5dfeb059974e2b713 100644 (file)
@@ -1056,9 +1056,10 @@ static int process_text_line(struct ast_config *cfg, struct ast_category **cat,
                                /* #exec </path/to/executable>
                                   We create a tmp file, then we #include it, then we delete it. */
                                if (!do_include) {
+                                       struct timeval tv = ast_tvnow();
                                        if (!ast_test_flag(&flags, CONFIG_FLAG_NOCACHE))
                                                config_cache_attribute(configfile, ATTRIBUTE_EXEC, NULL, who_asked);
-                                       snprintf(exec_file, sizeof(exec_file), "/var/tmp/exec.%d.%ld", (int)time(NULL), (long)pthread_self());
+                                       snprintf(exec_file, sizeof(exec_file), "/var/tmp/exec.%d%d.%ld", (int)tv.tv_sec, (int)tv.tv_usec, (long)pthread_self());
                                        snprintf(cmd, sizeof(cmd), "%s > %s 2>&1", cur, exec_file);
                                        ast_safe_system(cmd);
                                        cur = exec_file;