[
https://issues.apache.org/jira/browse/TS-4072?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15240075#comment-15240075
]
ASF GitHub Bot commented on TS-4072:
------------------------------------
Github user jpeach commented on a diff in the pull request:
https://github.com/apache/trafficserver/pull/568#discussion_r59631163
--- Diff: lib/ts/Diags.cc ---
@@ -853,29 +867,39 @@ Diags::set_stderr_output(const char *_bind_stderr)
if (strcmp(_bind_stderr, "") == 0)
return false;
- if (stderr_log) {
- delete stderr_log;
- stderr_log = NULL;
- }
-
- // create backing BaseLogFile for stdout
- stderr_log = new BaseLogFile(_bind_stderr);
+ BaseLogFile *old_stderr_log = stderr_log;
+ BaseLogFile *new_stderr_log = new BaseLogFile(_bind_stderr);
// on any errors we quit
- if (!stderr_log || stderr_log->open_file() !=
BaseLogFile::LOG_FILE_NO_ERROR) {
+ if (!new_stderr_log || new_stderr_log->open_file() !=
BaseLogFile::LOG_FILE_NO_ERROR) {
fprintf(stderr, "[Warning]: unable to open file=%s to bind stderr
to\n", _bind_stderr);
- delete stderr_log;
+ fprintf(stderr, "[Warning]: stderr is currently not bound to
anything\n");
+ delete new_stderr_log;
+ lock();
stderr_log = NULL;
+ unlock();
return false;
}
- if (!stderr_log->m_fp) {
+ if (!new_stderr_log->m_fp) {
--- End diff --
``new_stderr_log->is_open()``
> Diagnostic log rolling races
> ----------------------------
>
> Key: TS-4072
> URL: https://issues.apache.org/jira/browse/TS-4072
> Project: Traffic Server
> Issue Type: Bug
> Components: Logging
> Reporter: James Peach
> Assignee: Daniel Xu
> Fix For: 6.2.0
>
>
> When diagnostic logs are rolled, {{Diags::diags_log}} is deleted and replaced
> with a new log object. Since the global {{diags}} points to a a single
> {{Diags}} object there is nothing to prevent a different thread logging
> through this object at the time it is deleted.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)