[ 
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)

Reply via email to