Commit Graph

57 Commits

Author SHA1 Message Date
Russell Bryant
6efa254bea Fix cases where the internal poll() was not being used when it needed to be.
We have seen a number of problems caused by poll() not working properly on 
Mac OSX.  If you search around, you'll find a number of references to using 
select() instead of poll() to work around these issues.  In Asterisk, we've 
had poll.c which implements poll() using select() internally.  However, we 
were still getting reports of problems.

vadim investigated a bit and realized that at least on his system, even 
though we were compiling in poll.o, the system poll() was still being used.  
So, the primary purpose of this patch is to ensure that we're using the 
internal poll() when we want it to be used.

The changes are:

1) Remove logic for when internal poll should be used from the Makefile.  
   Instead, put it in the configure script.  The logic in the configure 
   script is the same as it was in the Makefile.  Ideally, we would have 
   a functionality test for the problem, but that's not actually possible, 
   since we would have to be able to run an application on the _target_ 
   system to test poll() behavior.

2) Always include poll.o in the build, but it will be empty if AST_POLL_COMPAT
   is not defined.

3) Change uses of poll() throughout the source tree to ast_poll().  I feel 
   that it is good practice to give the API call a new name when we are 
   changing its behavior and not using the system version directly in all cases.
   So, normally, ast_poll() is just redefined to poll().  On systems where 
   AST_POLL_COMPAT is defined, ast_poll() is redefined to ast_internal_poll().

4) Change poll() in main/poll.c to be ast_internal_poll().

It's worth noting that any code that still uses poll() directly will work fine 
(if they worked fine before).  So, for example, out of tree modules that are 
using poll() will not stop working or anything.  However, for modules to work 
properly on Mac OSX, ast_poll() needs to be used.

(closes issue #13404)
Reported by: agalbraith
Tested by: russell, vadim

http://reviewboard.digium.com/r/198/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@182810 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-03-18 02:09:13 +00:00
Doug Bailey
a591301b89 Merged revisions 177035 manually from
https://origsvn.digium.com/svn/asterisk/trunk

........
  r177035 | dbailey | 2009-02-18 11:24:07 -0600 (Wed, 18 Feb 2009) | 2 lines
  
  Fixed error where a check for an zero length, terminated string was needed.
........


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@177039 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-02-18 17:41:05 +00:00
Doug Bailey
bf0b8526b1 Need to take into account the \0 terminator of the old string to determine the amount available.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@176945 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-02-18 15:59:22 +00:00
Kevin P. Fleming
4d808232cf correct a logic error in the last stringfields commit... don't mark additional space as allocated if the string was built using already-allocated space
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@176254 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-02-16 21:41:46 +00:00
Kevin P. Fleming
1b5b3efcae fix a flaw in the ast_string_field_build() family of API calls; these functions made no attempt to reuse the space already allocated to a field, so every time the field was written it would allocate new space, leading to what appeared to be a memory leak.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@176216 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-02-16 21:10:38 +00:00
Russell Bryant
8b68bd17e5 Fix up timeout handling in ast_carefulwrite().
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@166297 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-12-22 17:22:56 +00:00
Russell Bryant
991494f2c0 Make ast_carefulwrite() be more careful.
This patch handles some additional cases that could result in partial writes
to the file description.  This was done to address complaints about partial
writes on AMI.

(issue #13546) (more changes needed to address potential problems in 1.6)
Reported by: srt
Tested by: russell
Review: http://reviewboard.digium.com/r/99/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@165796 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-12-18 21:39:25 +00:00
Russell Bryant
63444acf6b Fix an issue where DEBUG_THREADS may erroneously report that a thread
is exiting while holding a lock.

If the last lock attempt was a trylock, and it failed, it will still be in the
list of locks so that it can be reported.

(closes issue #13219)
Reported by: pj


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@164881 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-12-16 21:38:29 +00:00
Russell Bryant
c2446000d9 Remove the test_for_thread_safety() function completely.
The test is not valid.  Besides, if we actually suspected that recursive
mutexes were not working, we would get a ton of LOG_ERROR messages when
DEBUG_THREADS is turned on.

(inspired by a discussion on the asterisk-dev list)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@162413 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-12-09 22:17:39 +00:00
Kevin P. Fleming
18df35a2c1 somehow missed a bunch of gcc 4.3.x warnings in this branch on the first pass
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@153823 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-11-03 13:01:18 +00:00
Kevin P. Fleming
888d269e8f revert an optimization that broke ABI... thanks russell!
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@133237 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-07-23 21:05:22 +00:00
Kevin P. Fleming
f6d7c63346 minor optimization for stringfields: when a field is being set to a larger value than it currently contains and it happens to be the most recent field allocated from the currentl pool, it is possible to 'grow' it without having to waste the space it is currently using (or potentially even allocate a new pool)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@132872 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-07-23 11:52:18 +00:00
Tilghman Lesher
db4ae54745 In this debugging function, copy to a buffer instead of using potentially unsafe pointers.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@125793 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-06-27 13:45:03 +00:00
Jason Parker
a9d6021211 Make sure to unlock the lock_info lock (huh?). Possible deadlock?
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@125587 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-06-26 23:03:15 +00:00
Brett Bryant
f35ccc37be Merge revision 124064 from trunk. Add errors that report any locks held by threads when they are being closed.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@124066 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-06-19 19:55:36 +00:00
Tilghman Lesher
65808210e9 Add some debugging code that ensures that when we do deadlock avoidance, we
don't lose the information about how a lock was originally acquired.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@118953 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-05-29 17:20:16 +00:00
Russell Bryant
a3d59980ea Don't declare a function that takes variable arguments as inline, because it's
not valid, and on some compilers, will emit a warning.

http://gcc.gnu.org/onlinedocs/gcc/Inline.html#Inline

(closes issue #12289)
Reported by: francesco_r
Patches by Tilghman, final patch by me


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@118048 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-05-23 12:30:53 +00:00
Mark Michelson
f1696e2133 If a thread holds no locks, do not print any information on the thread when issuing
a core show locks command. This will help to de-clutter output somewhat.

Russell said it would be fine to place this improvement in the 1.4 branch, so that's
why it's going here too.



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@115735 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-05-12 17:51:14 +00:00
Tilghman Lesher
dceb0835da '#' is another reserved character for URIs that also needs to be escaped.
(closes issue #10543)
 Reported by: blitzrage
 Patches: 
       20080418__bug10543.diff.txt uploaded by Corydon76 (license 14)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@115017 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-05-01 18:59:08 +00:00
Mark Michelson
1a9b7dc5c5 Fix 1.4 build when LOW_MEMORY is enabled.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@114051 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-04-10 20:59:49 +00:00
Russell Bryant
1dae97f2aa Tweak spacing in a recent change because I'm very picky.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@109838 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-03-19 04:06:05 +00:00
Mark Michelson
29a32cf040 Fix a logic flaw in the code that stores lock info which is displayed
via the "core show locks" command. The idea behind this section of code was
to remove the previous lock from the list if it was a trylock that had failed.
Unfortunately, instead of checking the status of the previous lock, we were referencing
the index immediately following the previous lock in the lock_info->locks array. 
The result of this problem, under the right circumstances, was that the lock which 
we currently in the process of attempting to acquire could "overwrite" the previous lock 
which was acquired. While this does not in any way affect typical operation, it *could*
lead to misleading "core show locks" output.




git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@109226 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-03-17 22:05:49 +00:00
Russell Bryant
12e5fb358a Fix a bug in the lock tracking code that was discovered by mmichelson. The issue
is that if the lock history array was full, then the functions to mark a lock as
acquired or not would adjust the stats for whatever lock is at the end of the array,
which may not be itself.  So, do a sanity check to make sure that we're updating
lock info for the proper lock.

(This explains the bizarre stats on lock #63 in BE-396, thanks Mark!)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@105116 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-02-28 22:23:05 +00:00
Russell Bryant
ac15754e9a Improve the lock tracking code a bit so that a bunch of old locks that threads
failed to lock don't sit around in the history.  When a lock is first locked,
this checks to see if the last lock in the list was one that was failed to be
locked.  If it is, then that was a lock that we're no longer sitting in a trylock
loop trying to lock, so just remove it.
(inspired by issue #11712)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@104102 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-02-25 23:19:05 +00:00
Tilghman Lesher
3acbb032f8 Increase constants to where we're less likely to hit them while debugging.
(Closes issue #11694)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@97194 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-01-08 20:47:07 +00:00
Joshua Colp
0a584613d6 Do not try to access information about a lock when printing out a trylock attempt. It is possible for the lock that it references to no longer be valid. This would have caused segfaults or deadlocks.
(issue #BE-263)
(closes issue #11080)
Reported by: callguy
(closes issue #11100)
Reported by: callguy


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@93377 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-12-17 22:28:09 +00:00
Russell Bryant
b5463cd8d3 Make the lock protecting each thread's list of locks it currently holds
recursive.  I think that this will fix the situation where some people have
said that "core show locks" locks up the CLI.
(related to issue #11080)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@91830 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-12-07 21:24:33 +00:00
Russell Bryant
82257a7e33 When DEBUG_THREADS is enabled, we only have the details about who is holding
a lock that we are waiting on for a mutex, not rwlocks.  This should fix the
problem where people have reported "core show locks" crashing sometimes.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@91074 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-12-05 00:48:47 +00:00
Tilghman Lesher
feed493993 Debugging is running into the 16-lock limit. Increase to avoid.
(This define is only effective when debugging is turned on, so there's
no effect for most installations.)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@89239 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-11-13 13:51:53 +00:00
Russell Bryant
b2382349dc Add some more details to the output of "core show locks". When a thread
is waiting for a lock, this will now show the details about who currently
has it locked.
(inspired by issue #11100)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@87396 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-10-29 20:22:07 +00:00
Joshua Colp
7fc2c32a92 Fix issue with ast_unescape_semicolon going into an endless loop.
(closes issue #10550)
Reported by: ramonpeek
Patches:
      unescape-85177-1.patch uploaded by IgorG (license 20)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@87294 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-10-29 14:23:49 +00:00
Russell Bryant
9fcc010cce Revert a change that I made for issue #10979 which, as has been pointed out to
me in issue #11018, doesn't really make sense.  There is no reason to have
the base64 decode function force a '\0' terminated buffer, when the result is
almost always binary, anyway.  In fact, this caused some breakage, as some code
in res_crypto passed in a buffer exactly the right size to get its binary
result, which got stomped on by this patch.

(closes issue #11018, reported by dimas)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@86237 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-10-18 04:40:52 +00:00
Russell Bryant
02bb2bcbaa Be pedantic about handling memory allocation failure.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@85649 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-10-15 19:22:45 +00:00
Russell Bryant
9c47228dff The loop in the handler for the "core show locks" could potentially block for
some amount of time.  Be a little bit more careful and prepare all of the
output in an intermediary buffer while holding a global resource.  Then, after
releasing it, send the output to ast_cli().


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@85647 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-10-15 19:11:38 +00:00
Russell Bryant
9b382ca76f Make sure that the base64 decoder returns a terminated string.
(closes issue #10979)
Reported by: ys
Patches: 
      util.c.diff uploaded by ys (license 281)
	    - small mods by me


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@85543 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-10-15 12:48:10 +00:00
Mark Michelson
30b6db4bcf The thread ID should be unsigned.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@85315 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-10-10 15:51:56 +00:00
Tilghman Lesher
96d11d3e02 This commit fixes the following issues:
- Deadlock in ast_write (issue #10406)
- Deadlock in ast_read (issue #10406)
- Possible mutex initialization error in lock.h (issue #10571)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@85158 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-10-09 21:55:06 +00:00
Russell Bryant
5fdc354155 Fulfull a feature request from Qwell on the "core show locks" output. It will
now note the lock type for each lock that a thread holds.
(mutex, rdlock, or wrlock)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@84271 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-10-01 21:07:06 +00:00
Jason Parker
f1cb3f70b7 Don't send a semicolon over the wire in sip notify messages.
Caused by fix for issue 9938.

I basically took the code that existed before 9938 was fixed, and
 copied it into a new function - ast_unescape_semicolon

There should be very few places this will be needed (pbx_config
 does NOT need this (see issue 9938 for details))

Issue 10430, patch by me, with help/ideas from murf (thanks murf).


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@79904 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-08-17 19:12:19 +00:00
Russell Bryant
2f41cceb1f Add some improvements to lock debugging. These changes take effect
with DEBUG_THREADS enabled and provide the following:

 * This will keep track of which locks are held by which thread as well as
   which lock a thread is waiting for in a thread-local data structure.  A
   reference to this structure is available on the stack in the dummy_start()
   function, which is the common entry point for all threads.  This information
   can be easily retrieved using gdb if you switch to the dummy_start() stack
   frame of any thread and print the contents of the lock_info variable.

 * All of the thread-local structures for keeping track of this lock information
   are also stored in a list so that the information can be dumped to the CLI
   using the "core show locks" CLI command.  This introduces a little bit of a
   performance hit as it requires additional underlying locking operations
   inside of every lock/unlock on an ast_mutex.  However, the benefits of
   having this information available at the CLI is huge, especially considering
   this is only done in DEBUG_THREADS mode.  It means that in most cases where
   we debug deadlocks, we no longer have to request access to the machine to
   analyze the contents of ast_mutex_t structures.  We can now just ask them
   to get the output of "core show locks", which gives us all of the information
   we needed in most cases.

I also had to make some additional changes to astmm.c to make this work when
both MALLOC_DEBUG and DEBUG_THREADS are enabled.  I disabled tracking of one
of the locks in astmm.c because it gets used inside the replacement memory
allocation routines, and the lock tracking code allocates memory.  This caused
infinite recursion.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@78095 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-08-03 19:39:49 +00:00
Joshua Colp
8e5dfb3cf9 Whoops, I meant R_5 not R5.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@77867 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-08-01 17:52:11 +00:00
Joshua Colp
bc7150c380 Extend autoconf logic to determine which version of gethostbyname_r is on the system.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@77863 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-08-01 17:22:35 +00:00
Luigi Rizzo
f870ccffff Use !defined(HAVE_GETHOSTBYNAME_R) to check for absence
of the function. This was already done in trunk.



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@72665 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-29 19:07:41 +00:00
Tilghman Lesher
0baf4aa941 Merged revisions 51194 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.2

........
r51194 | tilghman | 2007-01-17 14:52:21 -0600 (Wed, 17 Jan 2007) | 4 lines

When ast_strip_quoted was called with a zero-length string, it would treat a
NULL as if it were the quoting character (and would thus return the string
in memory immediately following the passed-in string).

........


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@51195 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-17 20:56:15 +00:00
Kevin P. Fleming
46d91e71c5 add support for tracking thread-local-storage objects that exist via 'threadstorage' CLI commands
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@49553 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-04 22:51:01 +00:00
Steve Murphy
517978fd5f These mods are to solve the problem in bug 7506. It's a lot of rework to solve a fairly small problem... such is life.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@47303 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-07 23:46:41 +00:00
Russell Bryant
e998b2b609 Merged revisions 46560 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.2

........
r46560 | russell | 2006-10-31 01:18:36 -0500 (Tue, 31 Oct 2006) | 3 lines

When handling the case where the hostname is just an IPV4 numeric address,
be sure to set the address type.  (issue #8247, alexr)

........


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@46561 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-31 06:19:56 +00:00
Kevin P. Fleming
ce4b0afb73 apparently developers are still not aware that they should be use ast_copy_string instead of strncpy... fix up many more users, and fix some bugs in the process
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@46200 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-25 14:32:08 +00:00
Kevin P. Fleming
1944a9a07c use a configure script test for PMTU discovery control instead of just assuming it's available on Linux
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@45027 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-13 15:41:14 +00:00
Kevin P. Fleming
09f6a6a167 Merged revisions 44955 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.2

........
r44955 | kpfleming | 2006-10-12 13:31:26 -0500 (Thu, 12 Oct 2006) | 2 lines

ensure that IAX2 and SIP sockets allow UDP fragmentation when running on Linux (thanks to Brian Candler on the asterisk-dev list for the tip)

........


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@44956 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-12 18:38:51 +00:00