Skip to content
Snippets Groups Projects
  • Mark Michelson's avatar
    a65fbf80
    Multiple revisions 375993-375994 · a65fbf80
    Mark Michelson authored
    ........
      r375993 | mmichelson | 2012-11-07 11:01:13 -0600 (Wed, 07 Nov 2012) | 30 lines
      
      Fix misuses of timeouts throughout the code.
      
      Prior to this change, a common method for determining if a timeout
      was reached was to call a function such as ast_waitfor_n() and inspect
      the out parameter that told how many milliseconds were left, then use
      that as the input to ast_waitfor_n() on the next go-around.
      
      The problem with this is that in some cases, submillisecond timeouts
      can occur, resulting in the out parameter not decreasing any. When this
      happens thousands of times, the result is that the timeout takes much
      longer than intended to be reached. As an example, I had a situation where
      a 3 second timeout took multiple days to finally end since most wakeups
      from ast_waitfor_n() were under a millisecond.
      
      This patch seeks to fix this pattern throughout the code. Now we log the
      time when an operation began and find the difference in wall clock time
      between now and when the event started. This means that sub-millisecond timeouts
      now cannot play havoc when trying to determine if something has timed out.
      
      Part of this fix also includes changing the function ast_waitfor() so that it
      is possible for it to return less than zero when a negative timeout is given
      to it. This makes it actually possible to detect errors in ast_waitfor() when
      there is no timeout.
      
      (closes issue ASTERISK-20414)
      reported by David M. Lee
      
      Review: https://reviewboard.asterisk.org/r/2135/
    ........
      r375994 | mmichelson | 2012-11-07 11:08:44 -0600 (Wed, 07 Nov 2012) | 3 lines
      
      Remove some debugging that accidentally made it in the last commit.
    ........
    
    Merged revisions 375993-375994 from http://svn.asterisk.org/svn/asterisk/branches/1.8
    ........
    
    Merged revisions 375995 from http://svn.asterisk.org/svn/asterisk/branches/10
    
    
    git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/11@376014 65c4cc65-6c06-0410-ace0-fbb531ad65f3
    a65fbf80
    History
    Multiple revisions 375993-375994
    Mark Michelson authored
    ........
      r375993 | mmichelson | 2012-11-07 11:01:13 -0600 (Wed, 07 Nov 2012) | 30 lines
      
      Fix misuses of timeouts throughout the code.
      
      Prior to this change, a common method for determining if a timeout
      was reached was to call a function such as ast_waitfor_n() and inspect
      the out parameter that told how many milliseconds were left, then use
      that as the input to ast_waitfor_n() on the next go-around.
      
      The problem with this is that in some cases, submillisecond timeouts
      can occur, resulting in the out parameter not decreasing any. When this
      happens thousands of times, the result is that the timeout takes much
      longer than intended to be reached. As an example, I had a situation where
      a 3 second timeout took multiple days to finally end since most wakeups
      from ast_waitfor_n() were under a millisecond.
      
      This patch seeks to fix this pattern throughout the code. Now we log the
      time when an operation began and find the difference in wall clock time
      between now and when the event started. This means that sub-millisecond timeouts
      now cannot play havoc when trying to determine if something has timed out.
      
      Part of this fix also includes changing the function ast_waitfor() so that it
      is possible for it to return less than zero when a negative timeout is given
      to it. This makes it actually possible to detect errors in ast_waitfor() when
      there is no timeout.
      
      (closes issue ASTERISK-20414)
      reported by David M. Lee
      
      Review: https://reviewboard.asterisk.org/r/2135/
    ........
      r375994 | mmichelson | 2012-11-07 11:08:44 -0600 (Wed, 07 Nov 2012) | 3 lines
      
      Remove some debugging that accidentally made it in the last commit.
    ........
    
    Merged revisions 375993-375994 from http://svn.asterisk.org/svn/asterisk/branches/1.8
    ........
    
    Merged revisions 375995 from http://svn.asterisk.org/svn/asterisk/branches/10
    
    
    git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/11@376014 65c4cc65-6c06-0410-ace0-fbb531ad65f3
sig_analog.c 123.95 KiB