Commit Graph

22737 Commits

Author SHA1 Message Date
Richard Mudgett
83c6a754e6 Cleanup core main on exit.
* Cleanup time zones on exit.

* Make exit clean/unclean report consistent for AMI and CLI in
really_quit().

(issue ASTERISK-20649)
Reported by: Corey Farrell
Patches:
      core-cleanup-1_8-10.patch (license #5909) patch uploaded by Corey Farrell
      core-cleanup-11-trunk.patch (license #5909) patch uploaded by Corey Farrell
      Modified


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@377135 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-12-03 20:26:37 +00:00
Richard Mudgett
570e415591 Cleanup config cache on exit.
(issue ASTERISK-20649)
Reported by: Corey Farrell
Patches:
      config-cleanup-all.patch (license #5909) patch uploaded by Corey Farrell


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@377104 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-12-03 19:29:17 +00:00
Richard Mudgett
2e036745a6 Cleanup CLI resources on exit and CLI command registration errors.
(issue ASTERISK-20649)
Reported by: Corey Farrell
Patches:
      cli-leaks-1_8-10.patch (license #5909) patch uploaded by Corey Farrell
      cli-leaks-11-trunk.patch (license #5909) patch uploaded by Corey Farrell
      Modified


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@377073 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-12-03 19:13:01 +00:00
Richard Mudgett
b46de39d2a Cleanup CDR resources on exit.
* Simplify do_reload() return handling since it never returned anything
other than 0.

(issue ASTERISK-20649)
Reported by: Corey Farrell
Patches:
      cdr-cleanup-1_8.patch (license #5909) patch uploaded by Corey Farrell
      cdr-cleanup-10-11-trunk.patch (license #5909) patch uploaded by Corey Farrell
      Modified


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@377069 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-12-03 18:38:21 +00:00
Richard Mudgett
2686dcb9c1 Fix CCSS CLI commands and logger level not unregistered.
(issue ASTERISK-20649)
Reported by: Corey Farrell
Patches:
      ccss-cleanup-all.patch (license #5909) patch uploaded by Corey Farrell


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@377037 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-12-03 17:05:40 +00:00
Richard Mudgett
e0317a8b62 chan_misdn: Fix sending RELEASE_COMPLETE in response to SETUP.
Fix sending a RELEASE_COMPLETE in response to a SETUP if chan_misdn does
not have a B channel available to assign to the call.

(closes issue ABE-2869)
Reported by: Guenther Kelleter
Patches:
      setup-reject_2.diff (license #6372) patch uploaded by Guenther Kelleter
      Modified

........

Merged revision 376949 from https://origsvn.digium.com/svn/asterisk/be/branches/C.3-bier


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@376950 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-30 21:30:48 +00:00
Sean Bright
61f2bc9adc Minor spelling fix to the VOLUME documentation.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@376919 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-30 17:04:34 +00:00
Mark Michelson
a8ebaddfd9 Fix potential crashes during SIP attended transfers.
The principal behind this patch is simple. During a transfer,
we manipulate channels that are owned by a separate thread than
the one we currently are running in, so it makes sense that we
need to grab a reference to the channels so that they cannot
disappear out from under us.

In the wild, crashes were sometimes seen when the transferring
party would hang up the call before the transfer target answered
the call. The most common place to see the crash occur was when
attempting to send a connected line update to the transferer
channel.

(closes issue ASTERISK-20226)
Reported by Jared Smith
Patches:
	ASTERISK-20226.patch uploaded by Mark Michelson (License #5049)
Tested by: Jared Smith



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@376901 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-30 16:12:07 +00:00
Richard Mudgett
3c0fe09b3f chan_local: Fix local_pvt ref leak in local_devicestate().
Regression introduced by ASTERISK-20390 fix.

(closes issue ASTERISK-20769)
Reported by: rmudgett
Tested by: rmudgett


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@376868 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-29 22:55:51 +00:00
Richard Mudgett
a6ea86f435 Fix compile error.
(issue ASTERISK-20724)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@376864 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-29 22:29:03 +00:00
Michael L. Young
febd1bc0b4 Improve Code Readability And Fix Setting natdetected Flag
For 1.8, 10, 11 and trunk we are are improving the code readability.

For 11 and trunk, auto nat detection was added.  The natdetected flag was being
set to 1 when the host address in the VIA header did not specifiy a port.  This
patch fixes this by setting the port on the temporary sock address used to
SIP_STANDARD_PORT in order for the sock address comparison to work properly.

(closes issue ASTERISK-20724)
Reported by: Michael L. Young
Patches:
    asterisk-20724-set-port-v2.diff uploaded by Michael L. Young (license 5026)

Review: https://reviewboard.asterisk.org/r/2206/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@376834 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-29 21:49:40 +00:00
Richard Mudgett
1a9d086bdd Add MALLOC_DEBUG atexit unreleased malloc memory summary.
* Adds the following CLI commands to control MALLOC_DEBUG reporting of
unreleased malloc memory when Asterisk is shut down.
memory atexit list on
memory atexit list off
memory atexit summary byline
memory atexit summary byfunc
memory atexit summary byfile
memory atexit summary off

* Made check all remaining allocated region blocks atexit for fence
violations.

* Increased the allocated region hash table size by about three times.  It
still isn't large enough considering the number of malloced blocks
Asterisk uses.

* Made CLI "memory show allocations anomalies" use
regions_check_all_fences().

Review: https://reviewboard.asterisk.org/r/2196/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@376788 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-29 00:42:27 +00:00
Richard Mudgett
9059504be9 Enhance MALLOC_DEBUG CLI commands.
* Fixed CLI "memory show allocations" misspelling of anomalies option.
The command will still accept the original misspelling.

* Miscellaneous tweaks to CLI "memory show allocations" command output
format.

* Made CLI "memory show summary" summarize by line number instead of by
function if a filename is given.

* Made CLI "memory show summary" sort its output by filename or
function-name/line-number depending upon request.

* Miscellaneous tweaks to CLI "memory show summary" command output format.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@376758 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-29 00:03:29 +00:00
Jonathan Rose
ac0111e30a manager: Make challenge work with allowmultiplelogin=no
Prior to this patch, challenge would yield a multiple logins error if used
without providing the username (which isn't really supposed to be an argument
to challenge) if allowmultiplelogin was set to no because allowmultiplelogin
finds a user with a zero length login name. This check is simply disabled for
the challenge action when the username is empty by this patch.

(closes issue ASTERISK-20677)
Reported by: Vladimir
Patches:
    challenge_action_nomultiplelogin.diff uploaded by Jonathan Rose (license 6182)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@376725 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-28 16:23:47 +00:00
Richard Mudgett
7f0bfe536f Fix extension matching with the '-' char.
The '-' char is supposed to be ignored by the dialplan extension matching.
Unfortunately, it's treatment is not handled consistently throughout the
extension matching code.

* Made the old exten matching code consistently ignore '-' chars.

* Made the old exten matching code consistently handle case in the
matching.

* Made ignore empty character sets.

* Fixed ast_extension_cmp() to return -1, 0, or 1 as documented.  The only
user of it in pbx_lua.c was testing for -1.  It was originally returning
the strcmp() value for less than which is not usually going to be -1.

* Fix character set sorting if the sets have the same number of characters
and start with the same character.  Character set [0-9] now sorts before
[02-9a] as originally intended.

* Updated some extension label and priority already in use warnings to
also indicate if the extension is aliased.

(closes issue ASTERISK-19205)
Reported by: Philippe Lindheimer, Birger "WIMPy" Harzenetter
Tested by: rmudgett

Review: https://reviewboard.asterisk.org/r/2201/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@376688 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-27 23:47:27 +00:00
Richard Mudgett
1e8a45c170 Remove unnecessary channel module references.
* Removed call to ast_module_user_hangup_all() in res_config_mysql.c since
it is effectively a noop.  No channels can attach a reference to that
module.

* Removed call to ast_module_user_hangup_all() in app_celgenuserevent.c.
The caller of unload_module() has already called it.

* Removed redundant channel module references in pbx_dundi.c.  The
registered dialplan function callback dispatchers for the read/read2/write
callbacks already reference the module before calling.

* pbx_dundi: Moved unregistering CLI commands, DUNDi switch, and dialplan
functions to the first thing the unload_module() does.  This will reduce
the chance of new channels using DUNDi services while the module is being
torn down.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@376657 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-27 20:32:31 +00:00
Richard Mudgett
7b54904b81 Made AST_LIST_REMOVE() simpler and use better names.
* Update doxygen of AST_LIST_REMOVE().


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@376627 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-27 17:28:43 +00:00
Matthew Jordan
274a263773 Re-initialize logmsgs mutex upon logger initialization to prevent lock errors
Similar to the patch that moved the fork earlier in the startup sequence to
prevent mutex errors in the recursive mutex surrounding the read/write thread
registration lock, this patch re-initializes the logmsgs mutex.  Part of the
start up sequence before forking the process into the background includes
reading asterisk.conf; this has to occur prior to the call to daemon in order
to read startup parameters.  When reading in a conf file, log statements can
be generated.  Since this can't be avoided, the mutex instead is
re-initialized to ensure a reset of any thread tracking information.

This patch also includes some additional debugging to catch errors when
locking or unlocking the recursive mutex that surrounds locks when the
DEBUG_THREADS build option is enabled.  DO_CRASH or THREAD_CRASH will
cause an abort() if a mutex error is detected.

(issue ASTERISK-19463)
Reported by: mjordan
Tesetd by: mjordan



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@376586 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-22 23:51:02 +00:00
Mark Michelson
33e5e3a4f3 Add "Require: timer" to 200 OK responses when appropriate.
The method by which the Require header is added to 200 responses is
inspired by the method that Olle Johansson uses in his darjeeling-prack
branch.

(closes issue ASTERISK-20570)
Reported by Matt Jordan, at the behest of Olle Johansson

Review: https://reviewboard.asterisk.org/r/2172



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@376521 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-20 16:45:50 +00:00
Walter Doekes
99778e88f4 Fix most leftover non-opaque ast_str uses.
Instead of calling str->str, one should use ast_str_buffer(str). Same
goes for str->used as ast_str_strlen(str) and str->len as
ast_str_size(str).

Review: https://reviewboard.asterisk.org/r/2198


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@376469 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-19 19:30:58 +00:00
Matthew Jordan
aba63cda67 Reorder startup sequence to prevent lockups when process is sent to background
Although it is very rare and timing dependent, the potential exists for the
call to 'daemon' to cause what appears to be a deadlock in Asterisk during
startup.  This can occur when a recursive mutex is obtained prior to the
daemon call executing.  Since daemon uses fork to send the process into the
background, any threading primitives are unsafe to re-use after the call.
Implementations of pthread recursive mutexes are highly likely to store the
thread identifier of the thread that previously obtained the mutex.  If
the mutex was locked prior to the fork, a subsequent unlock operation will
potentially fail as the thread identifier is no longer valid.  Since the
mutex is still locked, all subsequent attempts to grab the mutex by other
threads will block.

This behavior exhibited itself most often when DEBUG_THREADS was enabled, as
this compile time option surrounds the mutexes in Asterisk with another
recursive mutex that protects the storage of thread related information.  This
made it much more likely that a recursive mutex would be obtained prior to
daemon and unlocked after the call.

This patch does the following:
a) It backports a patch from Asterisk 11 that prevents the spawning of the
   localtime monitoring thread.  This thread is now spawned after Asterisk has
   fully booted.
b) It re-orders the startup sequence to call daemon earlier during Asterisk
   startup.  This limits the potential of threading primitives being accessed
   by initialization calls before daemon is called.
c) It removes calls to ast_verbose/ast_log/etc. prior to daemon being called.
   Developers should send error messages directly to stderr prior to daemon,
   as calls to ast_log may access recursive mutexes that store thread related
   information.
d) It reorganizes when thread local storage is created for storing lock
   information during the creation of threads.  Prior to this patch, the
   read/write lock protecting the list of threads in ast_register_thread would
   utilize the lock in the thread local storage prior to it being initialized;
   this patch prevents that.

On a very related note, this patch will *greatly* improve the stability of the
Asterisk Test Suite.

Review: https://reviewboard.asterisk.org/r/2197

(closes issue ASTERISK-19463)
Reported by: mjordan
Tested by: mjordan



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@376428 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-18 20:11:18 +00:00
Jonathan Rose
654c0661c8 monitor: prevent attempts to move/remove recordings skipped with 'i' and 'o'.
The i and o options for monitor skip the input and output sides of a recording
respectively. This patch addresses a problem in those options when monitor is
called without specifying a specific filename where monitor will try to move
the recording that was skipped. Since this usually doesn't exist when these
options are used, it would produce a warning when it does this in most cases,
but it is conceivable that there are use cases where this could result in
moving/removing a file unintentionally.

(closes issue ASTERISK-20641)
Reported by: Jonathan Rose
Review: https://reviewboard.asterisk.org/r/2190/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@376389 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-16 19:31:48 +00:00
David M. Lee
2dae604628 Fixed extconf.c breakage introduced in r376306.
To quote wdoekes:
> Note that I'm not confirming legitimacy of having that file in tree at
> all. Is anyone using aelparse/conf2ael?



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@376340 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-15 23:58:05 +00:00
Jonathan Rose
aaa5514742 app_meetme: Fix channels lingering when hung up under certain conditions
Channels would get stuck and MeetMe would repeatedly display an Unable
to write frame to channel error in the conf_run function if hung up
during certain sound prompts such as during user count announcements.
This patch fixes that by reintroducing a hangup check in the meetme's
main loop (also in conf_run).

(closes issue ASTERISK-20486)
Reported by: Michael Cargile
Review: https://reviewboard.asterisk.org/r/2187/
Patches:
    meetme_hangup_patch_ASTERISK-20486_v3.diff uploaded by Jonathan Rose (license 6182)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@376307 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-15 22:40:50 +00:00
David M. Lee
fe1ea0d38e Migrate hashtest/hashtest2 to be unit tests.
Both hashtest and hashtest2 are manual testing apps that thrash hash
tables (hashtab and ao2 containers, respectively), by spinning up
several threads that randomly insert, delete, lookup and iterate over
the hash table. If the app doesn't crash, the hash table probably passes
the test. Those utils are not a part of the typical Asterisk build, so
they do not usually get compiled. This all makes them less that useful.

This patch removes those manual test programs and replaces them with
Asterisk unit test modules (test_{hashtab,astobj2}_thrash.so). It also
attempts to make the tests more deterministic.

* Rather than spinning up some number of threads that operate on the
  hash table randomly, spin up four threads that concurrenly add,
  remove, lookup and iterate over the hash table.
* Each thread checks the state of the hash table both during and after
  execution, and indicates a test failure if things are not as expected.
* Each thread times out after 60 seconds to prevent deadlocking the unit
  test run.

(closes issue ASTERISK-20505)
Reported by: Matt Jordan
Review: https://reviewboard.asterisk.org/r/2189/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@376306 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-15 22:27:37 +00:00
Rusty Newton
c50c68592a Patch to play correct sound file when a voicemail's urgent status is removed
We were attempting to play "vm-urgent-removed", which didn't exist. Now we play "vm-marked-nonurgent" which exists
and is the correct sound file. Previous behavior was silence and a warning on the CLI. 

(issue ASTERISK-20280)
(closes issue ASTERISK-20280)
Reported by: Tomo Takebe
Tested by: Rusty Newton
Patches:
    asterisk20280.patch uploaded by Rusty Newton (license 5829)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@376262 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-15 01:43:43 +00:00
Richard Mudgett
9560d09673 Fix call files when astspooldir is relative.
Future dated call files are ignored when astspooldir is relative to the
current directory.  The queue_file() assumed that the qdir needed to be
prepended if the given filename did not start with a '/'.  If astspooldir
is relative it is not going to start from the root directory obviously so
it will not start with a '/'.  The filename used in queue_file()
ultimately results in qdir prepended multiple times.

* Made queue_file() not prepend qdir if the filename contains a '/'.

(closes issue ASTERISK-20593)
Reported by: James Le Cuirot
Patches:
      0004-Fix-future-call-files-from-relative-directories.patch (license #6439) patch uploaded by James Le Cuirot


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@376232 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-14 19:48:13 +00:00
Brent Eagles
68ae2318a1 Patch to prevent stopping the active generator when it is not the silence
generator.

This patch introduces an internal helper function to safely check whether the
current generator is the one that is expected before deactivating it. The
current externally accessible ast_channel_stop_generator() function has been
modified to be implemented in terms of the new function.

(closes issue ASTERISK-19918)
Reported by: Eduardo Abad


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@376199 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-13 18:10:22 +00:00
Joshua Colp
fb255a86a1 Properly check if the "Context" and "Extension" headers are empty in a ShowDialPlan action.
The code which handles the ShowDialPlan action wrongly assumed that a non-NULL return value
from the function which retrieves headers from an action indicates that the header has a
value. This is incorrect and the contents must be checked to see if they are blank.

(closes issue ASTERISK-20628)
Reported by: jkroon
Patches:
     asterisk-showdialplan-incorrect-error.patch uploaded by jkroon


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@376166 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-12 20:44:00 +00:00
Michael L. Young
0cb7b1d776 Fix Dynamic Hints Variable Substition - Underscore Problem
When adding a dynamic hint, if an extension contains an underscore no variable
subsitution is being performed.

This patch changes from checking if the extension contains an underscore to
checking if the extension begins with an underscore.

(closes issue ASTERISK-20639)
Reported by: Steven T. Wheeler
Tested by: Steven T. Wheeler, Michael L. Young
Patches:
  asterisk-20639-dynamic-hint-underscore.diff 
                                     uploaded by Michael L. Young (license 5026)

Review: https://reviewboard.asterisk.org/r/2188/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@376142 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-12 20:13:53 +00:00
Mark Michelson
9ea3e78e54 Fix a "set but not used" warning on newer gccs.
Turns out the "helpful" setting of ms and res in this
macro is completely useless after the timeout antipattern
fix.

If you're a new guy looking to write code, don't write
a macro like this one.



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@376087 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-08 21:56:49 +00:00
Richard Mudgett
6dbda720fc chan_dahdi/SS7: Made reject incoming call for an in-alarm or blocked channel.
If a SS7 call comes in requesting a CIC that is in-alarm, the call is
accepted and connects if the extension exists in the dialplan.  The call
does not have any audio.

* Made release the call immediately with circuit congestion cause.

(closes issue ASTERISK-20204)
Reported by: Tuan Le
Patches:
      jira_asterisk_20204_v1.8.patch (license #5621) patch uploaded by rmudgett


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@376058 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-08 21:05:40 +00:00
Richard Mudgett
df3fc95c4a Add MALLOC_DEBUG enhancements.
* Makes malloc() behave like calloc().  It will return a memory block
filled with 0x55.  A nonzero value.

* Makes free() fill the released memory block and boundary fence's with
0xdeaddead.  Any pointer use after free is going to have a pointer
pointing to 0xdeaddead.  The 0xdeaddead pointer is usually an invalid
memory address so a crash is expected.

* Puts the freed memory block into a circular array so it is not reused
immediately.

* When the circular array rotates out a memory block to the heap it checks
that the memory has not been altered from 0xdeaddead.

* Made the astmm_log message wording better.

* Made crash if the DO_CRASH menuselect option is enabled and something is
found.

* Fixed a potential alignment issue on 64 bit systems.
struct ast_region.data[] should now be aligned correctly for all
platforms.

* Extracted region_check_fences() from __ast_free_region() and
handle_memory_show().

* Updated handle_memory_show() CLI usage help.

Review: https://reviewboard.asterisk.org/r/2182/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@376029 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-08 16:58:52 +00:00
Mark Michelson
a63451b81c Remove some debugging that accidentally made it in the last commit.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@375994 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-07 17:08:44 +00:00
Mark Michelson
e95efa6c50 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/



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@375993 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-07 17:01:13 +00:00
Richard Mudgett
2fcf4a32a0 Fix stuck DTMF when bridge is broken.
When a bridge is broken by an AMI Redirect action or the ChannelRedirect
application, an in progress DTMF digit could be stuck sending forever.

* Made simulate a DTMF end event when a bridge is broken and a DTMF digit
was in progress.

(closes issue ASTERISK-20492)
Reported by: Jeremiah Gowdy
Patches:
      bridge_end_dtmf-v3.patch.txt (license #6358) patch uploaded by Jeremiah Gowdy
      Modified to jira_asterisk_20492_v1.8.patch
      jira_asterisk_20492_v1.8.patch (license #5621) patch uploaded by rmudgett
Tested by: rmudgett

Review: https://reviewboard.asterisk.org/r/2169/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@375964 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-06 18:18:32 +00:00
Matthew Jordan
d8a6097f96 Refactor ast_timer_ack to return an error and handle the error in timer users
Currently, if an acknowledgement of a timer fails Asterisk will not realize
that a serious error occurred and will continue attempting to use the timer's
file descriptor.  This can lead to situations where errors stream to the
CLI/log file.  This consumes significant resources, masks the actual problem
that occurred (whatever caused the timer to fail in the first place), and
can leave channels in odd states.

This patch propagates the errors in the timing resource modules up through
the timer core, and makes users of these timers handle acknowledgement
failures.  It also adds some defensive coding around the use of timers
to prevent using bad file descriptors in off nominal code paths.

Note that the patch created by the issue reporter was modified slightly for
this commit and backported to 1.8, as it was originally written for
Asterisk 10.

(issue ASTERISK-20032)
Reported by: Jeremiah Gowdy
patches:
  jgowdy-timerfd-6-22-2012.diff uploaded by Jeremiah Gowdy (license 6358)




git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@375893 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-05 22:50:21 +00:00
Richard Mudgett
f20a72153b Add safety NULL pointer check in module user references.
Made __ast_module_user_remove() check for NULL pointers.
........

Merged revision 375860 from C.3


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@375862 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-05 21:36:56 +00:00
Matthew Jordan
2ae2531c0b Don't attempt to purge sessions when no sessions exist
Manager's tcp/tls objects have a periodic function that purge old manager
sessions periodically.  During shutdown, the underlying container holding
those sessions can be disposed of and set to NULL before the tcp/tls periodic
function is stopped.  If the periodic function fires, it will attempt to
iterate over a NULL container.

This patch checks for whether or not the sessions container exists before
attempting to purge sessions out of it.  If the sessions container is NULL,
we simply return.

Note that this error was also caught by the Asterisk Test Suite.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@375800 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-04 03:06:49 +00:00
Matthew Jordan
24d5348b9f Properly clean up manager resources on exit
This patch does two things:
1) It properly unregisters the manager CLI commands
2) It cleans up AMI users on exit.  Prior to this patch, the AMI users
   were not being disposed of properly, resulting in a memory leak.

(closes issue ASTERISK-20646)
Reported by: Corey Farrell
patches:
  manager_shutdown.patch uploaded by Corey Farrell (license 5909)



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@375793 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-04 02:25:48 +00:00
Matthew Jordan
19ce7a69b3 Fix memory leak when unloading XML documentation
This patch is a modified version of a patch originally committed for the
Asterisk 11 branch in r375756.  A portion of that patch, that fixed the
memory leak during unloading XML documentation, applies to branches 1.8
and 10 as well.

The patch for this issue was modified for these two branches.

(issue ASTERISK-20648)
Reported by: Corey Farrell
Tested by: mjordan
patches:
  xmldoc-memory_leak.patch uploaded by Corey Farrell (license 5909)



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@375758 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-04 00:54:19 +00:00
Matthew Jordan
a35ca27a2e Prevent multiple CDR batches from conflicting when scheduling the CDR write
The Asterisk Test Suite caught an error condition where a scheduled CDR batch
write can be deleted twice if two channels attempt to post their CDRs at the
same time.  The batch CDR mutex is locked while the CDRs are appended to the
current batch list; however, it is unlocked prior to actually scheduling the
CDR write.  As such, two threads can attempt to remove the currently scheduled
batch write at the same time, resulting in an assertion error.

This patch extends the time that the mutex is locked to encompass actually
scheduling the write.  This prevents two threads from unscheduling the
currently scheduled write at the same time.



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@375727 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-03 23:44:30 +00:00
Andrew Latham
9fce533f29 Doxygen Updates
Replace links to missing text files removed in the 1.6.x series with links to the wiki.  Doxygen can handle URLs fine, don't atempt to quote them.  Also update the wiki link in the Readme to get everyone on the same page.

(issue ASTERISK-20259)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@375698 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-03 03:11:25 +00:00
Richard Mudgett
6799706b15 Things don't need to be that const.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@375658 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-02 20:48:03 +00:00
Richard Mudgett
d385c66382 Multiple revisions 375519-375524
........
  r375519 | rmudgett | 2012-10-30 16:06:15 -0500 (Tue, 30 Oct 2012) | 11 lines

  chan_misdn: Timer primitives must be handled first.

  The frm->addr is a different "address space" than the stack/instance
  address of other Lx primitives.  The test for B channel instance address
  could fail.

  Patches:
	patch01_timers.diff (license #6372) patch uploaded by Guenther Kelleter

  JIRA ABE-2888

  ........
  r375520 | rmudgett | 2012-10-30 16:14:58 -0500 (Tue, 30 Oct 2012) | 10 lines

  chan_misdn: Free memory in error paths and other memory leaks.

  The one line commented with BUG is not easily fixable because there is no
  de-init function one can call.

  Patches:
	patch02_memory.diff (license #6372) patch uploaded by Guenther Kelleter

  JIRA ABE-2888

  ........
  r375521 | rmudgett | 2012-10-30 16:38:41 -0500 (Tue, 30 Oct 2012) | 14 lines

  chan_misdn: ISDN NT L2 de-establish/establish

  * An NT-PTMP cannot de/establish L2 since it doesn't know the TEIs.
  * On NT-PTP L2 is started when L1 is finally active in handle_l1.
  * L2 deactivation logging cleanup.
  * L2 aggregate link status is unknown for NT-PTMP, show as "UNKN".
  * Removed unused functions and code for L2 handling.

  Patches:
	patch03_L2estab.diff (license #6372) patch uploaded by Guenther Kelleter
	Modified

  JIRA ABE-2888

  ........
  r375522 | rmudgett | 2012-10-30 16:56:14 -0500 (Tue, 30 Oct 2012) | 22 lines

  chan_misdn: Fix broken upper_id/lower_id usage.

  Sending PH prim via lower_id layer (3 or 1) simply does not work.  For TE
  (3) it returns an error (len=-6) which is not evaluated by handle_l1(), so
  the L1 layer status ends up wrong.  Instead PH must be sent via L4, only
  then does it reach L1 without an error message.

  And NT PH prims only reach L1 when they are sent to layer 2 id.
  --> use upper_id to send PH primitives.

  * Check for errors in PH_(DE)ACTIVATE | CONFIRM.
  * Debug messages are improved.

  * The lower_id is now not used for anything, except: Why is lower_id layer
  deleted when it wasn't created?  I removed this code since it looks very
  wrong.

  Patches:
	patch04_l1activation.diff (license #6372) patch uploaded by Guenther Kelleter

  JIRA ABE-2888

  ........
  r375523 | rmudgett | 2012-10-30 17:29:15 -0500 (Tue, 30 Oct 2012) | 31 lines

  chan_misdn: Fix loss of B channels if L1 is down.

  If you make 2 calls out an NT PTMP port which is not connected to any
  phone, the B channel associated with that call becomes unusable until
  Asterisk is restarted.

  The problem is the EVENT_SETUP is queued when L1 is not up in
  misdn_lib_send_event().  If L1 cannot be activated the event won't be
  dequeued.  It gets even worse when the call is hung up.  The queued
  EVENT_SETUP will be overwritten by an EVENT_DISCONNECT.  The reserved B
  channel then will never be freed.  If later someone connects a phone to
  the port, L1 will eventually activate and the queued EVENT_DISCONNECT is
  sent down the stack.  However, it is ignored because it is the wrong call
  state.

  The real fix would be that activation and queueing for a new SETUP is done
  by the NT stack.  But since it doesn't, the workaround must be removed
  because it doesn't always work.

  Fix: The event is no longer queued but immediately sent to the stack.  If
  L1 cannot be activated, the L3 state machine that was started by the
  EVENT_SETUP will do its work, i.e.  a timeout will release the B channel
  properly.  The SETUP possibly cannot be sent the first time but is resent
  by T303 in case L1 could be activated.

  Patches:
	patch05_bchan-loss.diff (license #6372) patch uploaded by Guenther Kelleter
	Modified

  JIRA ABE-2888

........
  r375524 | rmudgett | 2012-10-30 18:26:05 -0500 (Tue, 30 Oct 2012) | 13 lines

  chan_misdn: Remove some calls to exit().

  Try proper cleanup when something goes wrong in misdn_lib_init().
  Especially do not call exit()!

  * Fix memory leak because stack_destroy() does not free the stack struct.

  Patches:
	patch06_cleanup-init.diff (license #6372) patch uploaded by Guenther Kelleter
	Modified

  JIRA ABE-2888
........

Merged revisions 375519-375524 from https://origsvn.digium.com/svn/asterisk/be/branches/C.3-bier


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@375625 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-02 18:40:15 +00:00
Michael L. Young
e949d5297c Fix Wrong Result In Debug Message For SDP Origin Processing
While looking at some debug logs, I noticed that it was being reported that the
SDP origin line was unsupported or failed.  Upon looking into this on my local
machine, I found that I too was getting this debug message yet everything seemed
to be getting processed properly.  What was discovered is, that, the variable to
determine what is displayed in the debug message for the SDP line that was
processed, was not being set for the origin line when the result was successful.

This patch fixes this and was tested on local machine.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@375594 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-11-02 16:58:14 +00:00
Matthew Jordan
360be3260f Properly extract the Body information of an EWS calendar item
Unlike all other calendar modules, res_calendar_ews fails to extract the Body
information for a calendar item.  This is due, in part, to a quirk in the
schema in the XML - not only does a CalendarItem contain a Body element, but
the CalendarItem exists as a descendant of a different Body element.  The neon
parser was erroneously skipping all Body elements.

This patch fixes that by bypassing Body elements that are not a child of
CalendarItem, and parsing the Body element out if it is a child.

Note that the original patch by Terry Wilson only needed slight modifications
to make it properly pull the Body information out; as such, while I've linked
to the patch that I uploaded for Dmitry, I've attributed the patch to Terry.

(closes issue ASTERISK-19738)
Reported by: Dmitry Burilov
Tested by: Dmitry Burilov
patches:
  calendar_ews_body_2012_10_29.diff uploaded by Terry Wilson (license 6283)



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@375528 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-10-31 14:23:36 +00:00
Jonathan Rose
a72df39f77 mixmonitor: Add a test event
This test event is being used to fix the  mixmonitor_audiohook_inherit
test.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@375484 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-10-30 18:48:06 +00:00
Matthew Jordan
7a8ba7aa08 Ensure that the Queue application tracks busy members in off nominal situations
There are a few code paths where the Queue application fails to count a paused
or in use queue member as being 'busy'.  This can cause callers to get stuck
in the Queue until a paused agent unpauses themselves.

(closes issue ASTERISK-20623)
Reported by: Bryan Walters
patches:
  app_queue.patch uploaded by Bryan Walters (license 5851)




git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@375450 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-10-30 02:07:32 +00:00
Mark Michelson
26267c1a9c Prevent resetting of NATted realtime peer address on reload.
If a "sip reload" is issued for a SIP peer, then his
IP address will be cleared, thus resulting in forgetting the
public IP address. Asterisk will then attempt to route SIP
traffic to the private IP address.

The fix here is to make "sip reload" ignore realtime peers
when "host = dynamic" is spotted. Realtime peers can now only
have their IP address reset if they have gone from being not
dynamic to being dynamic.

(closes issue ASTERISK-18203)
reported by daren ferreira

(closes issue ASTERISK-20572)
reported by JoshE
Patches:
	fix_nat_realtime.diff uploaded by JoshE (license #6075)



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@375415 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-10-29 21:01:21 +00:00