Commit Graph

5272 Commits

Author SHA1 Message Date
Mark Michelson
8adb8e3e1a Merge "taskprocessor.c: Fix some taskprocessor unrefs." 2016-01-20 14:18:57 -06:00
Diederik de Groot
b259ac95ac main/asterisk.c: ast_el_read_char
Make sure buf[res] is not accessed at res=-1 (buffer underrun).
Address Sanitizer will complain about this quite loudly.

ASTERISK-24801 #close

Change-Id: Ifcd7f691310815a31756b76067c56fba299d3ae9
2016-01-20 18:37:56 +01:00
Richard Mudgett
c9f7269b2e taskprocessor.c: Increase CLI "core ping taskprocessor" timeout.
Change-Id: I4892d6acbb580d6c207d006341eaf5e0f8f2a029
2016-01-19 16:48:59 -06:00
Richard Mudgett
6e2a867716 taskprocessor.c: Fix some taskprocessor unrefs.
You have to call ast_taskprocessor_unref() outside of the taskprocessor
implementation code.  Taskprocessor use since v12 has become more
transient than just the singleton uses in earlier versions.

Change-Id: If7675299924c0cc65f2a43a85254e6f06f2d61bb
2016-01-19 16:48:14 -06:00
Corey Farrell
35a3e8cc7f Refactor init_logger_chain locking.
This removes logchannels locking from init_logger_chain, puts the
responsibility on the caller.  Adds locking around the one call that was
missing it.

ASTERISK-24833

Change-Id: I6cc42117338bf9575650a67bcb78ab1a33d7bad8
2016-01-19 14:21:25 -05:00
Joshua Colp
82938d0507 Merge "main/config: Clean config maps on shutdown." 2016-01-17 11:44:38 -06:00
Joshua Colp
34dbed9619 Merge "bridge_basic: don't play an attended transfer fail sound after target hangs up" 2016-01-16 08:29:58 -06:00
Joshua Colp
a19a513714 Merge "bridge_basic: don't cache xferfailsound during an attended transfer" 2016-01-16 08:29:17 -06:00
Joshua Colp
644a9d0e99 Merge "taskprocessor.c: Simplify ast_taskprocessor_get() return code." 2016-01-16 08:28:17 -06:00
Corey Farrell
480ccfcc97 main/config: Clean config maps on shutdown.
ASTERISK-25700 #close

Change-Id: I096da84f9c62c6095f68bcf98eac4b7c7868e808
2016-01-15 20:00:08 -06:00
Kevin Harwell
a5b38b604c bridge_basic: don't cache xferfailsound during an attended transfer
The xferfailsound was read from the channel at the beginning of the transfer,
and that value is "cached" for the duration of the transfer. Therefore, changing
the xferfailsound on the channel using the FEATURE() dialplan function does
nothing once the transfer is under way.

This makes it so the transfer code instead gets the xferfailsound configuration
options from the channel when it is actually going to be used.

This patch also fixes a potential memory leak of the props object as well as
making sure the condition variable gets initialized before being destroyed.

ASTERISK-25696 #close

Change-Id: Ic726b0f54ef588bd9c9c67f4b0e4d787934f85e4
2016-01-15 17:51:18 -06:00
Richard Mudgett
d36c4d0b01 taskprocessor.c: Simplify ast_taskprocessor_get() return code.
Change-Id: Id5bd18ef1f60ef8be453e677e98478298358a9d1
2016-01-15 12:44:33 -06:00
Richard Mudgett
0a878020dc astmm.c: Add more stats to CLI "memory show" commands.
* Add freed regions totals to allocations and summary.

* Add totals for all allocations and not just the selected allocations.

Change-Id: I61d5a5112617b0733097f2545a3006a344b4032a
2016-01-14 19:57:29 -06:00
Kevin Harwell
84b30c5e18 bridge_basic: don't play an attended transfer fail sound after target hangs up
If the attended transfer destination answers (picks call up or goes to
voicemail) and then hangs up on the transferer then transferer hears the
fail sound.

This patch makes it so the fail sound is not played when the transfer
destination/target hangs up after answering.

ASTERISK-25697 #close

Change-Id: I97f142fe4fc2805d1a24b7c16143069dc03d9ded
2016-01-14 16:06:03 -06:00
Joshua Colp
022423b98b app: Queue hangup if channel is hung up during sub or macro execution.
This issue was exposed when executing a connected line subroutine.
When connected or redirected subroutines or macros are executed it is
expected that the underlying applications and logic invoked are fast
and do not consume frames. In practice this constraint is not enforced
and if not adhered to will cause channels to continue when they shouldn't.
This is because each caller of the connected or redirected logic does not
check whether the channel has been hung up on return. As a result the
the hung up channel continues.

This change makes it so when the API to execute a subroutine or
macro is invoked the channel is checked to determine if it has hung up.
If it has then a hangup is queued again so the caller will see it
and stop.

ASTERISK-25690 #close

Change-Id: I1f9a8ceb1487df0389f0d346ce0f6dcbcaf476ea
2016-01-13 11:01:18 -06:00
Joshua Colp
9e6ea2ba72 Merge topic 'update_taskprocessor_commands'
* changes:
  Sorcery: Create human friendly serializer names.
  Stasis: Create human friendly taskprocessor/serializer names.
  taskprocessor.c: New API for human friendly taskprocessor names.
  taskprocessor.c: Sort CLI "core show taskprocessors" output.
2016-01-12 13:25:49 -06:00
Joshua Colp
7e418b1ab5 Merge "taskprocessor.c: Fix CLI "core show taskprocessors" output format." 2016-01-12 13:18:58 -06:00
Joshua Colp
e89d2691e9 Merge topic 'update_taskprocessor_commands'
* changes:
  taskprocessor.c: Fix CLI "core show taskprocessors" unref.
  taskprocessor.c: Add CLI "core ping taskprocessor" missing unlock.
2016-01-12 13:18:35 -06:00
Joshua Colp
e57defa8dd Merge "ccss.c: Replace space in taskprocessor name." 2016-01-12 13:17:54 -06:00
Joshua Colp
fb8bdcce01 Merge "pbx: Deadlock between contexts container and context_merge locks" 2016-01-11 17:37:19 -06:00
Joshua Colp
3a2d91c282 Merge "manager: Cleanup manager_channelvars during shutdown." 2016-01-11 14:35:14 -06:00
Kevin Harwell
7760029f19 pbx: Deadlock between contexts container and context_merge locks
Recent changes (ASTERISK-25394 commit 2bd27d1222)
introduced the possibility of a deadlock. Due to the mentioned modifications
ast_change_hints now needs to keep both merge/delete and state callbacks from
occurring while it executes. Unfortunately, sometimes ast_change_hints can be
called with the contexts container locked. When this happens it's possible for
another thread to grab the context_merge_lock before the thread calling into
ast_change_hints does and then try to obtain the contexts container lock. This
of course causes a deadlock between the two threads. The thread calling into
ast_change_hints waits for the other thread to release context_merge_lock and
the other thread is waiting on that one to release the contexts container lock.

Unfortunately, there is not a great way to fix this problem. When hints change,
the subsequent state callbacks cannot run at the same time as a merge/delete,
nor when the usual state callbacks do. This patch alleviates the problem by
having those particular callbacks (the ones run after a hint change) occur in a
serialized task. By moving the context_merge_lock to a task it can now safely be
attempted or held without a deadlock occurring.

ASTERISK-25640 #close
Reported by: Krzysztof Trempala

Change-Id: If2210ea241afd1585dc2594c16faff84579bf302
2016-01-11 13:46:25 -06:00
Corey Farrell
e9c2c1dc67 devicestate: Cleanup engine thread during graceful shutdown.
ASTERISK-25681 #close

Change-Id: I64337c70f0ebd8c77f70792042684607c950c8f1
2016-01-10 17:16:28 -06:00
Corey Farrell
90c0dcaee4 manager: Cleanup manager_channelvars during shutdown.
ASTERISK-25680 #close

Change-Id: I3251d781cbc3f48a6a7e1b969ac4983f552b2446
2016-01-10 13:53:25 -06:00
Richard Mudgett
f0f5fbbc01 Sorcery: Create human friendly serializer names.
Sorcery name formats:
sorcery/<type>-<seq> -- Sorcery thread pool serializer

Change-Id: Idc2e5d3dbab15c825b97c38c028319a0d2315c47
2016-01-08 22:11:29 -06:00
Richard Mudgett
b1c7ae9afc Stasis: Create human friendly taskprocessor/serializer names.
Stasis name formats:
subm:<topic>-<seq> -- Stasis subscription mailbox task processor
subp:<topic>-<seq> -- Stasis subscription thread pool serializer

Change-Id: Id19234b306e3594530bb040bc95d977f18ac7bfd
2016-01-08 22:11:29 -06:00
Richard Mudgett
3e857bb347 taskprocessor.c: New API for human friendly taskprocessor names.
* Add new API call to get a sequence number for use in human friendly
taskprocessor names.

* Add new API call to create a taskprocessor name in a given buffer and
append a sequence number.

Change-Id: Iac458f05b45232315ed64aa31b1df05b875537a9
2016-01-08 22:11:01 -06:00
Richard Mudgett
84c245d38c taskprocessor.c: Fix CLI "core show taskprocessors" output format.
Update the CLI "core show taskprocessors" output format to not be
distorted because UUID names are longer than previously used taskprocessor
names.

Change-Id: I1a5c82ce3e8f765a0627796aba87f8f7be077601
2016-01-08 21:05:16 -06:00
Richard Mudgett
7d86979ea0 taskprocessor.c: Fix CLI "core show taskprocessors" unref.
Change-Id: I1d9f4e532caa6dfabe034745dd16d06134efdce5
2016-01-08 21:05:16 -06:00
Richard Mudgett
1fb39aa8a0 ccss.c: Replace space in taskprocessor name.
The CLI "core ping taskprocessor" command does not work very
well with taskprocessor names that have spaces in them.  You
have to put quotes around the name so using tab completion
becomes awkward.

Change-Id: I29e806dd0a8a0256f4e2e0a7ab88c9e19ab0eda0
2016-01-08 21:05:16 -06:00
Richard Mudgett
71bb7b9c40 taskprocessor.c: Sort CLI "core show taskprocessors" output.
Change-Id: I71e7bf57c7b908c8b8c71f1816348ed7c5a5d51e
2016-01-08 21:05:16 -06:00
Richard Mudgett
b025e1982f taskprocessor.c: Add CLI "core ping taskprocessor" missing unlock.
Change-Id: I78247e0faf978bf850b5ba4e9f4933ab3c59d17b
2016-01-08 21:05:16 -06:00
Mark Michelson
a146bde1f7 Merge "main: Use ast_strdup instead of strdup" 2016-01-08 14:46:51 -06:00
Corey Farrell
5d8c42c6d3 ast_format_cap_append_by_type: Resolve codec reference leak.
This resolves a reference leak caused by ASTERISK-25535.  The pointer
returned by ast_format_get_codec is saved so it can be released.

ASTERISK-25664 #close

Change-Id: If9941b1bf4320b2c59056546d6bce9422726d1ec
2016-01-07 10:39:19 -05:00
Diederik de Groot
7856762f2f main: Use ast_strdup instead of strdup
Fix compile error in main/utils.c because strdup was used in dummy_start

Change-Id: Id61a6cf4f3cbf235450441e10e7da101a6335793
2016-01-07 10:34:15 +01:00
Joshua Colp
c8e786ff66 Merge topic 'pbx-split'
* changes:
  main/pbx: Move hangup handler routines to pbx_hangup_handler.c.
  main/pbx: Move dialplan application management routines to pbx_app.c.
  main/pbx: Move switch routines to pbx_switch.c.
2016-01-06 06:13:29 -06:00
Joshua Colp
e00e6a606e Merge "main/pbx: Move timing routines to pbx_timing.c." 2016-01-06 06:09:48 -06:00
Matt Jordan
f3a052667e Merge "main/pbx: Move variable routines to pbx_variables.c." 2016-01-05 13:38:45 -06:00
Corey Farrell
36f1eaf0b5 main/pbx: Move hangup handler routines to pbx_hangup_handler.c.
This is the sixth patch in a series meant to reduce the bulk of pbx.c.
This moves hangup handler management functions to their own source.

Change-Id: Ib25a75aa57fc7d5c4294479e5cc46775912fb104
2016-01-05 12:08:40 -05:00
Matt Jordan
193ac48db0 Merge "Happy new year 2016." 2016-01-05 09:39:47 -06:00
Corey Farrell
3507494b8a main/pbx: Move dialplan application management routines to pbx_app.c.
This is the sixth patch in a series meant to reduce the bulk of pbx.c.
This moves dialplan application management functions to their own source.

Change-Id: I444c10fb90a3cdf9f3047605d6a8aad49c22c44c
2016-01-04 20:46:25 -05:00
Corey Farrell
54a8f1a396 main/pbx: Move switch routines to pbx_switch.c.
This is the fifth patch in a series meant to reduce the bulk of pbx.c.
This moves ast_switch functions to their own source.

Change-Id: Ic2592a18a5c4d8a3c2dcf9786c9a6f650a8c628e
2016-01-04 19:20:35 -05:00
Corey Farrell
c3c8b8e41d main/pbx: Move timing routines to pbx_timing.c.
This is the fourth patch in a series meant to reduce the bulk of pbx.c.
This moves pbx timing functions to their own source.

Change-Id: I05c45186cb11edfc901e95f6be4e6a8abf129cd6
2016-01-04 19:00:23 -05:00
George Joseph
6d18fe151c voicemail: Move app_voicemail / res_mwi_external conflict to runtime
The menuselect conflict between app_voicemail and res_mwi_external
makes it hard to package 1 version of Asterisk.  There no actual
build dependencies between the 2 so moving this check to runtime
seems like a better solution.

The ast_vm_register and ast_vm_greeter_register functions in app.c
were modified to return AST_MODULE_LOAD_DECLINE instead of -1 if there
is already a voicemail module registered. The modules' load_module
functions were then modified to return DECLINE instead of -1 to the
loader.  Since -1 is interpreted by the loader as AST_MODULE_LOAD_FAILURE,
the modules were incorrectly causing Asterisk to stop so this needed
to be cleaned up anyway.

Now you can build both and use modules.conf to decide which voicemail
implementation to load.

The default menuselect options still build app_voicemail and not
res_mwi_external but if both ARE built, res_mwi_external will load
first and become the voicemail provider unless modules.conf rules
prevent it.  This is noted in CHANGES.

Change-Id: I7d98d4e8a3b87b8df9e51c2608f0da6ddfb89247
2016-01-04 17:31:24 -06:00
Corey Farrell
5ee5c3739e main/pbx: Move variable routines to pbx_variables.c.
This is the third patch in a series meant to reduce the bulk of pbx.c.
This moves channel and global variable routines to their own source.

Change-Id: Ibe8fb4647db11598591d443a99e3f99200a56bc6
2016-01-04 17:15:14 -05:00
Matt Jordan
839f328601 Merge "main/cdr: Allow setting properties on a finalized CDR if it is the last one" 2016-01-04 09:02:54 -06:00
Matt Jordan
5201984ed6 Merge "main/cdr: Set the end time on a CDR if endbeforehexten is Yes" 2016-01-04 09:02:48 -06:00
Matt Jordan
e9dd16364e main/cdr: Allow setting properties on a finalized CDR if it is the last one
Prior to this patch, we explicitly disallowed setting any properties on a
finalized CDR. This seemed like a good idea at the time; in practice, it was
more restrictive.

There are weird and strange scenarios where setting a property on a finalized
CDR is definitely wrong. For example, we may Fork a CDR, finalizing the
previous one, then change a property. In said case, the old CDR is supposed
to now be 'immutable' (so to speak), and should not be updated. From the
perspective of the code, a forked CDR that is finalized is just finalized.
Hence why we decided these should not be updated.

In practice, it is much more common to want to set a property on a CDR in
the h extension or in a hangup handler. Disallowing a common scenario to make
an esoteric behaviour work isn't good. This patch fixes this by allowing
callers to set a property IF we are the last CDR in the chain. This preserves
the finalized CDR if it was forked, while allowing the more common case to
function.

ASTERISK-25458 #close

Change-Id: Icf3553c607b9f561152a41e6d8381d594ccdf4b9
2016-01-02 10:38:08 -06:00
Matt Jordan
153547a9b1 main/cdr: Set the end time on a CDR if endbeforehexten is Yes
Prior to this patch, the CDR engine attempted to set the end time on a CDR
that was executing hangup logic and with endbeforehexten set to Yes by
calling a function that inspects the properties on the Party A snapshot to
determine if we are ready to set the end time. That always failed. This is
because a Party A snapshot is not updated for CDRs that are executing hangup
logic with endbeforehexten=Yes.

Instead of calling a function that looks at the Party A snapshot, we just
simply set the end time on the CDR. This is safe to call multiple times, and is
safe to call at this point as we know that (a) we are executing hangup logic,
and (b) we are supposed to set the end time at this point.

ASTERISK-25458

Change-Id: I0c27b493861f9c13c43addbbb21257f79047a3b3
2016-01-02 10:36:10 -06:00
Corey Farrell
f9bfc2450e main/pbx: Move custom function routines to pbx_functions.c.
This is the second patch in a series meant to reduce the bulk of pbx.c.
This moves custom function management routines to their own source.

Change-Id: I34a6190282f781cdbbd3ce9d3adeac3c3805e177
2016-01-01 13:48:36 -05:00