Russell Bryant [Tue, 28 Aug 2007 19:12:53 +0000 (19:12 +0000)]
Change the audiohook lock and unlock wrappers to macros instead of inline
functions. As inline functions, the lock debug information will show that
these are always locked in audiohooks.h instead of the file where the lock was
actually acquired.
Russell Bryant [Tue, 28 Aug 2007 18:41:18 +0000 (18:41 +0000)]
Add proper channel locking around the uses of datastore_add and _find. There
are still more places in the tree that I have not yet changed if someone wants
to go through and find the places they are used without the channel locked.
Russell Bryant [Tue, 28 Aug 2007 18:32:56 +0000 (18:32 +0000)]
* Constify the uid field of channel datastores
* Convert some spaces to tabs in func_volume
* Add a note in channel.h making it clear that none of the datastore API calls
lock the channel they are given, so the channel should be locked before
calling the functions that take a channel argument.
Add support for configurable file locking methods. The default is "lockfile",
which is the old behavior. There is an additional option, "flock", which is
intended for use in situations where the lockfile method will not work, such as
with SMB/CIFS mounts.
Joshua Colp [Tue, 28 Aug 2007 14:37:09 +0000 (14:37 +0000)]
(closes issue #10579)
Reported by: ornati
Make sure the called channel during the attended transfer process becomes associated with the calling channel so that the ast_waitfor_* call works properly under epoll.
Resolve a potential deadlock. In this case, a single queue is locked, then the queue list. In changethread(), the queue list is
locked, and then each individual queue is locked. Under the right circumstances, this could deadlock. As such, I have unlocked
the individual queue before locking the queue list, and then locked the queue back after the queue list is unlocked.
DTMF begin frames should be ignored so that when an agent acks a call with the '#' key,
he doesn't cause a queue's announce file to be interrupted. Also went ahead and did the
same for the '*' key and for ending a call.
(closes issue #10528, reported by deskhack, patched by me)
Russell Bryant [Mon, 27 Aug 2007 17:28:14 +0000 (17:28 +0000)]
Merged revisions 81074 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r81074 | russell | 2007-08-27 12:27:48 -0500 (Mon, 27 Aug 2007) | 3 lines
Add a \todo to note that this module leaks most of the memory it allocates on
unload and should be fixed (when I'm not in the middle of something else ...).
This patch fixes a few problems with music on hold.
* Fix issues with starting at the beginning of a file when it shouldn't.
* Fix the inuse counter to be decremented even if the class had not been
set to be deleted when not in use anymore
* Don't arbitrarily limit the number of MOH files to 255
(closes issue #10561)
Reported by: jesselang
Patches:
chan_sip-ChannelReload-20080825.patch uploaded by jesselang (license 202)
Remove an extra \r\n to make the ChannelReload event conform with every other event.
Russell Bryant [Sat, 25 Aug 2007 17:55:45 +0000 (17:55 +0000)]
Merged revisions 80895 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r80895 | russell | 2007-08-25 12:37:39 -0500 (Sat, 25 Aug 2007) | 7 lines
Fix some issues with the handling of the scheduler in chan_iax2. Most of the
places that scheduled items to be executed by the scheduler thread did not
signal the scheduler thread to wake up so that it could recalculate the time
until the next action. These changes will make the scheduler thread more
responsive and ensure that actions get executed as close to when intended as
possible instead of it being possible for very long delays.
Russell Bryant [Fri, 24 Aug 2007 21:23:14 +0000 (21:23 +0000)]
Merged revisions 80849 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r80849 | russell | 2007-08-24 16:22:50 -0500 (Fri, 24 Aug 2007) | 5 lines
If dnsmgr is in use, and no DNS servers are available when Asterisk first
starts, then don't give up on poking peers. Allow the poke to get rescheduled
so that it will work once the dnsmgr is able to resolve the host.
(closes issue #10521, patch by jamesgolovich)
Russell Bryant [Fri, 24 Aug 2007 20:25:39 +0000 (20:25 +0000)]
Merged revisions 80820 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r80820 | russell | 2007-08-24 15:24:05 -0500 (Fri, 24 Aug 2007) | 7 lines
Improve the debouncing logic in the DTMF detector to fix some reliability
issues. Previously, this code used a shift register of hits and non-hits.
However, if the start of the digit isn't clean, it is possible for the
leading edge detector to miss the digit. These changes replace the flawed
shift register logic and also does the debouncing on the trailing edge as well.
(closes issue #10535, many thanks to softins for the patch)
A minor correction to the available logic of autofill. If a queue member is paused, they're not really "available" so don't count them as such. Somewhat related to issue #10155
Steve Murphy [Fri, 24 Aug 2007 19:03:39 +0000 (19:03 +0000)]
Merged revisions 80789 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r80789 | murf | 2007-08-24 12:52:15 -0600 (Fri, 24 Aug 2007) | 1 line
From a complaint by jmls, I realize that the message in cdr_disposition is unnecessary. To get failure disposition, just return -1; no use having more than one case do that.
........
Googletalk calls are answered too early, which results in CDRs wrongly
stating that a call was ANSWERED when the calling party cancelled a
call before before being established.
We must not answer the call upon reception of a 'transport-accept' iq
packet, but this packet still needs to be acknowledged, otherwise the
remote peer would close the call (like in #8970).
........
Steve Murphy [Thu, 23 Aug 2007 23:37:33 +0000 (23:37 +0000)]
an unreported crash I debugged, looked like it was backing up way too far after hitting the syntax error. An inspection of the code revealed that error tokens in lists were not rearranged when the rules were rearranged as part of a code neatening-up process. By moving the error tokens to where they should be, I also reduced the number of shift/reduce conflicts to 3 instead of 8. This introduces subtle differences in error messages, so the regressions had to be updated.
Russell Bryant [Thu, 23 Aug 2007 20:20:17 +0000 (20:20 +0000)]
Merged revisions 80573 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r80573 | russell | 2007-08-23 15:16:41 -0500 (Thu, 23 Aug 2007) | 5 lines
When executing a dynamic feature, don't look it up a second time by digit pattern
after we already looked it up by name. This causes broken behavior if there is
more than one feature defined with the same digit pattern.
(closes issue #10539, reported by bungalow, patch by me)
Russell Bryant [Thu, 23 Aug 2007 19:22:49 +0000 (19:22 +0000)]
Merged revisions 80539 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r80539 | russell | 2007-08-23 14:21:53 -0500 (Thu, 23 Aug 2007) | 4 lines
Fix func_timeout to take values in floating point so 1.5 actually means
1.5 seconds instead of being rounded.
(closes issue #10540, reported by spendergrass, patch by me)
report the actual channel number that was unregistered, instead of assuming that the interface list consists of channels 1 through <x> with no gaps in the sequence
Russell Bryant [Thu, 23 Aug 2007 16:54:19 +0000 (16:54 +0000)]
Blocked revisions 80497 via svnmerge
........
r80497 | russell | 2007-08-23 11:53:52 -0500 (Thu, 23 Aug 2007) | 5 lines
This is a hack to maintain old behavior of chan_iax2. This ensures that if
the peers and users are being stored in a linked list, that they go in the
list in the same order that the older code used. This is necessary to maintain
the behavior of which peers and users get matched when traversing the container.
Russell Bryant [Wed, 22 Aug 2007 22:54:26 +0000 (22:54 +0000)]
Merged revisions 80426 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r80426 | russell | 2007-08-22 17:54:03 -0500 (Wed, 22 Aug 2007) | 6 lines
Add some more documentation on iterating ao2 containers. The documentation
implies that is possible to miss an object or see an object twice while
iterating. After looking through the code and talking with mmichelson, I have
documented the exact conditions under which this can happen (which are rare and
harmless in most cases).
Russell Bryant [Wed, 22 Aug 2007 22:43:12 +0000 (22:43 +0000)]
Merged revisions 80424 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r80424 | russell | 2007-08-22 17:40:27 -0500 (Wed, 22 Aug 2007) | 10 lines
When converting this code to use the list macros, I changed it so objects are
added to the head of a bucket instead of the tail. However, while looking over
code with mmichelson, we noticed that the algorithm used in ao2_iterator_next
requires that items are added to the tail. This wouldn't have caused any huge
problem, but it wasn't correct. It meant that if an object was added to a
container while you were iterating it, and it was added to the same bucket that
the current element is in, then the new object would be returned by
ao2_iterator_next, and any other objects in the bucket would be bypassed in
the traversal.
Russell Bryant [Wed, 22 Aug 2007 20:44:23 +0000 (20:44 +0000)]
Merged revisions 80362 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r80362 | russell | 2007-08-22 15:21:36 -0500 (Wed, 22 Aug 2007) | 34 lines
Merge changes from team/russell/iax_refcount.
This set of changes fixes problems with the handling of iax2_user and iax2_peer
objects. It was very possible for a thread to still hold a reference to one of
these objects while a reload operation tries to delete them. The fix here is to
ensure that all references to these objects are tracked so that they can't go away
while still in use.
To accomplish this, I used the astobj2 reference counted object model. This
code has been in one of Luigi Rizzo's branches for a long time and was primarily
developed by one of his students, Marta Carbone. I wanted to go ahead and bring
this in to 1.4 because there are other problems similar to the ones fixed by these
changes, so we might as well go ahead and use the new astobj if we're going to go
through all of the work necessary to fix the problems.
As a nice side benefit of these changes, peer and user handling got more efficient.
Using astobj2 lets us not hold the container lock for peers or users nearly as long
while iterating. Also, by changing a define at the top of chan_iax2.c, the objects
will be distributed in a hash table, drastically increasing lookup speed in these
containers, which will have a very big impact on systems that have a large number of
users or peers.
The use of the hash table will be made the default in trunk. It is not the default
in 1.4 because it changes the behavior slightly. Previously, since peers and users
were stored in memory in the same order they were specified in the configuration file,
you could influence peer and user matching order based on the order they are specified
in the configuration. The hash table does not guarantee any order in the container,
so this behavior will be going away. It just means that you have to be a little
more careful ensuring that peers and users are matched explicitly and not forcing
chan_iax2 to have to guess which user is the right one based on secret, host, and
access list settings, instead of simply using the username.
If you have any questions, feel free to ask on the asterisk-dev list.
Russell Bryant [Wed, 22 Aug 2007 19:54:52 +0000 (19:54 +0000)]
Merged revisions 80360 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r80360 | russell | 2007-08-22 14:53:30 -0500 (Wed, 22 Aug 2007) | 5 lines
Juggie in #asterisk-dev was reporting problems where fgets would return
without reading the whole line when using fastagi. When this happens,
errno was set to EINTR or EAGAIN. This patch accounts for the possibility
and lets fgets continue in that case.
Russell Bryant [Wed, 22 Aug 2007 16:27:39 +0000 (16:27 +0000)]
Ensure that the object code for ast_atomic_fetchadd_int() gets included in the
check_expr binary when building with LOW_MEMORY defined.
(reported by Brian Capouch on the asterisk-dev list, patch by me)
Russell Bryant [Wed, 22 Aug 2007 16:22:27 +0000 (16:22 +0000)]
Merged revisions 80257 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r80257 | russell | 2007-08-22 11:21:58 -0500 (Wed, 22 Aug 2007) | 4 lines
Honor the contents of the COPTS variable as custom target CFLAGS. Apparently
this is what openwrt does.
(reported by Brian Capouch on the asterisk-dev list, patch by me)
Steve Murphy [Wed, 22 Aug 2007 14:12:24 +0000 (14:12 +0000)]
Merged revisions 80166 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r80166 | murf | 2007-08-21 10:36:34 -0600 (Tue, 21 Aug 2007) | 1 line
This patch solves problem 1 in 8126; it should not slow down the alaw codec, but should prevent signal degradation via multiple trips thru the codec. Fossil estimates the twice thru this codec will prevent fax from working. 4-6 times thru would result hearable, noticeable, voice degradation.
........
Russell Bryant [Tue, 21 Aug 2007 18:49:23 +0000 (18:49 +0000)]
Merged revisions 80183 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r80183 | russell | 2007-08-21 13:42:15 -0500 (Tue, 21 Aug 2007) | 7 lines
Don't record SIP dialog history if it's not turned on. Also, put an upper
limit on how many history entires will be stored for each SIP dialog. It is
currently set to 50, but can be increased if deemed necessary.
(closes issue #10421, closes issue #10418, patches suggested by jmoldenhauer,
patches updated by me)
(Security implications documented in AST-2007-020)
Steve Murphy [Mon, 20 Aug 2007 22:53:48 +0000 (22:53 +0000)]
This change set fixes bug 8126 in trunk. It is implemented via compile time options, activated via the menuselect stuff, which defaults to the old way. non-zero sample data added. Translate tables expressed in microseconds instead of milliseconds, with 5-digit data now instead of 3, giving 2 more digits of precision.
Found a pointless ternary if. member->dynamic was set to 1 and has no opportunity to change
between then and this line, so "dynamic" will ALWAYS be output.
Don't allocate vmu for messagecount when we could just use the stack instead (closes issue #10490)
Also, remove a useless (and leaky) SQLAllocHandle (closes issue #10480)
Russell Bryant [Fri, 17 Aug 2007 21:04:33 +0000 (21:04 +0000)]
Merged revisions 79912 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r79912 | russell | 2007-08-17 16:01:43 -0500 (Fri, 17 Aug 2007) | 4 lines
Avoid a crash in the handling of DTMF based Caller ID. It is valid for
ast_read to return NULL in the case that the channel has been hung up.
(crash reported by anonymouz666 on IRC in #asterisk-dev)
Patch allows for more seamless transition from file storage voicemail to ODBC storage voicemail.
If a retrieval of a greeting from the database fails, but the file is found on the file system, then
we go ahead an insert the greeting into the database. The result of this is that people who
switch from file storage to ODBC storage do not need to rerecord their voicemail greetings.
Russell Bryant [Fri, 17 Aug 2007 14:07:44 +0000 (14:07 +0000)]
This commit adds a scheduler API call, ast_sched_replace that can be used
in place of a very common construct. I also used it in a number of places
in chan_sip.
if (id > -1)
ast_sched_del(sched, id);
id = ast_sched_add(sched, ...);