Skip to content
Snippets Groups Projects
  • Russell Bryant's avatar
    92bd7f19
    Merge team/russell/ast_verbose_threadstorage · 92bd7f19
    Russell Bryant authored
    - instead of defining a free() wrapper in a bunch of files, define it as
      ast_free() in utils.h and remove the copies from all the files.
    
    - centralize and abstract the code used for doing thread storage. The code
      lives in threadstorage.h, with one function being implemented in utils.c.
      This new API includes generic thread storage as well as special functions
      for handling thread local dynamic length string buffers.
    
    - update ast_inet_ntoa() to use the new threadstorage API
    - update ast_state2str() to use the new threadstorage API
    - update ast_cli() to use the new threadstorage API
    
    - Modify manager_event() to use thread storage. Instead of using a buffer of
      4096 characters as the workspace for building the manager event, use a thread
      local dynamic string.  Now there is no length limitation on the length of the
      body of a manager event.
    
    - Significantly simplify the handling of ast_verbose() ...
      - Instead of using a static char buffer and a lock to make sure only one
        thread can be using ast_verbose() at a time, use a thread local dynamic
        string as the workspace for preparing the verbose message. Instead of
        locking around the entire function, the only locking done now is when the
        message has been built and is being deliviered to the list of registered
        verbose message handlers.
      - This function was doing a strdup() on every message passed to it and
        keeping a queue of the last 200 messages in memory. This has been
        completely removed. The only place this was used was that if there were
        any messages in the verbose queue when a verbose handler was registered,
        all of the messages in the queue would be fed to it.  So, I just made sure
        that the console verbose handler and the network verbose handler (for
        remote asterisk consoles) were registered before any verbose messages.
        pbx_gtkconsole and pbx_kdeconsole will now lose a few verbose messages at
        startup, but I didn't feel the performance hit of this message queue was
        worth saving the initial verbose output for these very rarely used modules.
      - I have removed the last three arguments to the verbose handlers, leaving
        only the string itself because they aren't needed anymore. For example,
        ast_verbose had some logic for telling the verbose handler to add
        a newline if the buffer was completely full. Now that the buffer can grow
        as needed, this doesn't matter anymore.
      - remove unused function, ast_verbose_dmesg() which was to dispatch the
        message queue
      - Convert the list of verbose handlers to use the linked list macros.
    
    - add missing newline characters to a few ast_verbose() calls
    
    - convert the list of log channels to use the linked list macros in logger.c
    
    - fix close_logger() to close all of the files it opened for logging
    
    - update ast_log() to use a thread local dynamic string for its workspace
      for preparing log messages instead of a buffer of size BUFSIZ (8kB on my
      system) allocated on the stack.  The dynamic string in this case is limited
      to only growing to a maximum size of BUFSIZ.
    
    
    git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@39272 65c4cc65-6c06-0410-ace0-fbb531ad65f3
    92bd7f19
    History
    Merge team/russell/ast_verbose_threadstorage
    Russell Bryant authored
    - instead of defining a free() wrapper in a bunch of files, define it as
      ast_free() in utils.h and remove the copies from all the files.
    
    - centralize and abstract the code used for doing thread storage. The code
      lives in threadstorage.h, with one function being implemented in utils.c.
      This new API includes generic thread storage as well as special functions
      for handling thread local dynamic length string buffers.
    
    - update ast_inet_ntoa() to use the new threadstorage API
    - update ast_state2str() to use the new threadstorage API
    - update ast_cli() to use the new threadstorage API
    
    - Modify manager_event() to use thread storage. Instead of using a buffer of
      4096 characters as the workspace for building the manager event, use a thread
      local dynamic string.  Now there is no length limitation on the length of the
      body of a manager event.
    
    - Significantly simplify the handling of ast_verbose() ...
      - Instead of using a static char buffer and a lock to make sure only one
        thread can be using ast_verbose() at a time, use a thread local dynamic
        string as the workspace for preparing the verbose message. Instead of
        locking around the entire function, the only locking done now is when the
        message has been built and is being deliviered to the list of registered
        verbose message handlers.
      - This function was doing a strdup() on every message passed to it and
        keeping a queue of the last 200 messages in memory. This has been
        completely removed. The only place this was used was that if there were
        any messages in the verbose queue when a verbose handler was registered,
        all of the messages in the queue would be fed to it.  So, I just made sure
        that the console verbose handler and the network verbose handler (for
        remote asterisk consoles) were registered before any verbose messages.
        pbx_gtkconsole and pbx_kdeconsole will now lose a few verbose messages at
        startup, but I didn't feel the performance hit of this message queue was
        worth saving the initial verbose output for these very rarely used modules.
      - I have removed the last three arguments to the verbose handlers, leaving
        only the string itself because they aren't needed anymore. For example,
        ast_verbose had some logic for telling the verbose handler to add
        a newline if the buffer was completely full. Now that the buffer can grow
        as needed, this doesn't matter anymore.
      - remove unused function, ast_verbose_dmesg() which was to dispatch the
        message queue
      - Convert the list of verbose handlers to use the linked list macros.
    
    - add missing newline characters to a few ast_verbose() calls
    
    - convert the list of log channels to use the linked list macros in logger.c
    
    - fix close_logger() to close all of the files it opened for logging
    
    - update ast_log() to use a thread local dynamic string for its workspace
      for preparing log messages instead of a buffer of size BUFSIZ (8kB on my
      system) allocated on the stack.  The dynamic string in this case is limited
      to only growing to a maximum size of BUFSIZ.
    
    
    git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@39272 65c4cc65-6c06-0410-ace0-fbb531ad65f3