On date Tuesday 2010-04-27 10:21:27 +0100, Dan O'Donovan phoned this: > Hi Stefano > > Would it be possible for you to implement a reference counter in the object > that your nua handle magic is pointing to? > You would need to be sure to increment/decrement it in a thread-safe way of > course. > Then, only free the nua handle magic when your reference counter has reached > 0. > > This would be similar to what Sofia does for the memory associated with the > nua handles themselves.
That was another attempt, I was using nua_magic_t to store an index containing a reference to an object from a thread-safe collection, and it seemed to work fine but for the fact that I was doing the unsafe cast void * <-> unsigned int. In other words I was putting an unique integer identifier in the magic of the nua_handle: nua_handle_t *handle = nua_handle(nua, (void *)an_unsigned_int, ta_tags(ta)); and extracting that index from the nua_magic when dealing with the nua handle in the sofia nua event callback. Note that the unsafe conversion problem maybe would be addressable by allowing to define NUA_HANDLE_MAGIC_T like the type of the object effectively stored in the nua handle magic, e.g.: #define NUA_HANDLE_MAGIC_T (struct hairy_weird_stuff *) or: #define NUA_HANDLE_MAGIC_T (unsigned int) rather than the type of the object *pointed to* by the magic: #define NUA_HANDLE_MAGIC_T struct hairy_weird_stuff Thanks for the help, regards. ------------------------------------------------------------------------------ _______________________________________________ Sofia-sip-devel mailing list Sofia-sip-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/sofia-sip-devel