summaryrefslogtreecommitdiff
path: root/main/event.c
AgeCommit message (Collapse)Author
2009-03-25Improve performance of the ast_event cache functionality.Russell Bryant
This code comes from svn/asterisk/team/russell/event_performance/. Here is a summary of the changes that have been made, in order of both invasiveness and performance impact, from smallest to largest. 1) Asterisk 1.6.1 introduces some additional logic to be able to handle distributed device state. This functionality comes at a cost. One relatively minor change in this patch is that the extra processing required for distributed device state is now completely bypassed if it's not needed. 2) One of the things that I noticed when profiling this code was that a _lot_ of time was spent doing string comparisons. I changed the way strings are represented in an event to include a hash value at the front. So, before doing a string comparison, we do an integer comparison on the hash. 3) Finally, the code that handles the event cache has been re-written. I tried to do this in a such a way that it had minimal impact on the API. I did have to change one API call, though - ast_event_queue_and_cache(). However, the way it works now is nicer, IMO. Each type of event that can be cached (MWI, device state) has its own hash table and rules for hashing and comparing objects. This by far made the biggest impact on performance. For additional details regarding this code and how it was tested, please see the review request. (closes issue #14738) Reported by: russell Review: http://reviewboard.digium.com/r/205/ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@184339 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-11-29incorporates r159808 from branches/1.4:Kevin P. Fleming
------------------------------------------------------------------------ r159808 | kpfleming | 2008-11-29 10:58:29 -0600 (Sat, 29 Nov 2008) | 7 lines update dev-mode compiler flags to match the ones used by default on Ubuntu Intrepid, so all developers will see the same warnings and errors since this branch already had some printf format attributes, enable checking for them and tag functions that didn't have them format attributes in a consistent way ------------------------------------------------------------------------ in addition: move some format attributes from main/utils.c to the header files they belong in, and fix up references to the relevant functions based on new compiler warnings git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@159818 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-08-10Another big chunk of changes from the RSW branch. Bunch of stuff from main/Sean Bright
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@137082 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-06-10Add an additional sanity check in case an event is passed between Mark Michelson
Asterisk boxes with mismatched ie_maps. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@121649 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-06-10Merge some more changes from team/russell/eventsRussell Bryant
This commit pulls in a batch of improvements and additions to the event API. Changes include: - the ability to dynamically build a subscription. This is useful if you're building a subscription based on something you receive from the network, or from options in a configuration file. - Add tables of event types and IE types and the corresponding string representation for implementing text based protocols that use these events, for showing events on the CLI, reading configuration that references event information, among other things. - Add a table that maps IE types and the corresponding payload type. - an API call to get the total size of an event - an API call to get all events from the cache that match a subscription - a new IE payload type, raw, which I used for transporting the Entity ID in my code for handling distributed device state. - Code improvements to reduce code duplication - Include the Entity ID of the server that originated the event in every event - an additional event type, DEVICE_STATE_CHANGE, to help facilitate distributed device state. DEVICE_STATE is a state change on one server, DEVICE_STATE_CHANGE is the aggregate device state change across all servers. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@121555 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-05-05Simplify code by using a taskprocessor for dispatching events in the ↵Russell Bryant
Asterisk core. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@115324 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-04-16Introducing a small optimization to event_unsubscribe; events now use a ↵Steve Murphy
Doubly-Linked list for events, gives fast deletions, for the sake of channel driver mwi events. From team/murf/bug11210. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@114183 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-02-13Fix a small logic error in ast_event_iterator_next. The previous logic ↵Mark Michelson
allowed for the iterator to indicate there was more data than there really was, causing the iterator read beyond the end of the event structure. This led to invalid memory reads and potential crashes. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@103559 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-02-11Fix a problem regarding network vs. host byte orderMark Michelson
in the event API. ast_event_iterator_get_ie_type should return the ie type in host byte order. Furthermore, ast_event_get_ie_raw should already have its ie type argument in host byte order since it could be called externally (and it in fact is called in this way by ast_event_get_cached). git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@103282 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-01-11Goodbye again drumkilla.Joshua Colp
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@98435 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-01-11drumkilla ftw.Joshua Colp
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@98434 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-12-11* In unaligned.h, remove some unnecessary casts and mark the arg of the Russell Bryant
get_unaligned functions as const * In event.c, use get_unaligned_uint32() in a couple of places to fix issues on architectures that don't allow unaligned access git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@92305 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-11-20move internal function declarations to include/asterisk/_private.hLuigi Rizzo
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@89465 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-11-16Start untangling header inclusion in a way that does not affectLuigi Rizzo
build times - tested, there is no measureable difference before and after this commit. In this change: use asterisk/compat.h to include a small set of system headers: inttypes.h, unistd.h, stddef.h, stddint.h, sys/types.h, stdarg.h, stdlib.h, alloca.h, stdio.h Where available, the inclusion is conditional on HAVE_FOO_H as determined by autoconf. Normally, source files should not include any of the above system headers, and instead use either "asterisk.h" or "asterisk/compat.h" which does it better. For the time being I have left alone second-level directories (main/db1-ast, etc.). git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@89333 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-11-08improve linked-list macros in two ways:Kevin P. Fleming
- the *_CURRENT macros no longer need the list head pointer argument - add AST_LIST_MOVE_CURRENT to encapsulate the remove/add operation when moving entries between lists git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@89106 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-08-29Try to clarify the rules on changing ast_event and ast_event_ieRussell Bryant
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@81356 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-08-29Fix parenthesis from my last commitRussell Bryant
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@81355 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-08-29Change pointer aritmetic on void * to char *Russell Bryant
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@81354 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-08-29there is not actually code that sends these over the network in trunk yetRussell Bryant
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@81353 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-08-29Return ast_event_get_ie_raw to using an iterator and fix logic in ↵Joshua Colp
ast_event_iterator_next. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@81348 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-08-29This concludes bringing trunk back to a working state.Joshua Colp
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@81345 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-08-29To keep others happy... revert part of my additions so trunk works.Joshua Colp
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@81344 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-08-29Add API calls for iterating through an event. This should allow events to ↵Joshua Colp
have multiple information elements (while there was nothing preventing it before you could not actually access any except the first one). git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@81334 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-08-10Merge a set of device state improvements from team/russell/events.Russell Bryant
The way a device state change propagates is kind of silly, in my opinion. A device state provider calls a function that indicates that the state of a device has changed. Then, another thread goes back and calls a callback for the device state provider to find out what the new state is before it can go send it off to whoever cares. I have changed it so that you can include the state that the device has changed to in the first function call from the device state provider. This removes the need to have to call the callback, which locks up critical containers to go find out what the state changed to. This change set changes the "simple" device state providers to use the new method. This includes parking, meetme, and SLA. I have also mostly converted chan_agent in my branch, but still have some more things to think through before presenting the plan for converting channel drivers to ensure all of the right events get generated ... git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@79027 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-06Issue 9869 - replace malloc and memset with ast_calloc, and other coding ↵Tilghman Lesher
guidelines changes git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@67864 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-16This file really needs more documentation...Olle Johansson
When we implement new API's - please include a small general overview in Doxygen git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@64496 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-28Merge changes from team/russell/eventsRussell Bryant
This set of changes introduces a new generic event API for use within Asterisk. I am still working on a way for events to be shared between servers, but this part is ready and can already be used inside of Asterisk. This set of changes introduces the first use of the API, as well. I have restructured the way that MWI (message waiting indication) is handled. It is now event based instead of polling based. For example, if there are a bunch of SIP phones subscribed to mailboxes, then chan_sip will not have to constantly poll the mailboxes for changes. app_voicemail will generate events when changes occur. See UPGRADE.txt and CHANGES for some more information on the effects of these changes from the user perspective. For developer information, see the text in include/asterisk/event.h. As always, additional feedback is welcome on the asterisk-dev mailing list. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@62292 65c4cc65-6c06-0410-ace0-fbb531ad65f3