[asterisk-users] asterisk 13.16 / pjsip / t.38: res_pjsip_t38.c:207 t38_automatic_reject: Automatically rejecting T.38 request on channel 'PJSIP/91-00000007'

Michael Maier m1278468 at mailbox.org
Wed Jun 14 10:47:44 CDT 2017


On 06/11/2017 at 06:51 PM Joshua Colp wrote:
> On Sun, Jun 11, 2017, at 01:47 PM, Joshua Colp wrote:
>> The distributor is in res/res_pjsip/pjsip_distributor.c, the distributor
>> function being the entry point. That function returning PJ_TRUE
>> indicates to PJSIP that it has been handled and no subsequent modules
>> should be called by that running thread. The distributor itself, though,
>> ends up executing things further in a worker thread using the distribute
>> function.
> 
> To be more detailed - PJSIP maintains no queue, a message comes in from
> a transport and is given to modules until one says it has handled the
> message. We place our distributor close to the transport and it puts the
> message into a queue for handling in Asterisk ensuring serialization as
> appropriate, returning that it has handled the message so no other
> modules handle it at that time. Once the message is handled from the
> queue it picks back up invoking modules at the point where the original
> thread left off. This ensures messages are handled as quickly as
> possible without blocking the transport but also provides guarantees on
> ordering and simultaneous execution. (Two messages for the same call
> will be handled in order, one at a time).
> 

I added this patch to see, if really all packages are are freed after
they have been processed:

--- b/res/res_pjsip/pjsip_distributor.c 2017-05-30 19:44:16.000000000 +0200
+++ a/res/res_pjsip/pjsip_distributor.c 2017-06-13 20:25:27.233000000 +0200
@@ -407,6 +407,7 @@
                /* We have a BYE or CANCEL request without a serializer. */
                pjsip_endpt_respond_stateless(ast_sip_get_pjsip_endpoint(), rdata,
                        PJSIP_SC_CALL_TSX_DOES_NOT_EXIST, NULL, NULL, NULL);
+               ast_debug(3, "PJ_TRUE 1\n");
                return PJ_TRUE;
        } else {
                if (ast_taskprocessor_alert_get()) {
@@ -439,8 +440,8 @@
                pjsip_rx_data_free_cloned(clone);
        }
 
+       ast_debug(3, "PJ_TRUE 3 - ready\n");
        ast_taskprocessor_unreference(serializer);
-
        return PJ_TRUE;
 }
 


Unfortunately, this patch crashes asterisk when debug is enabled. Is
there another way to check, if all the packages are really freed?


Thanks,
Michael



More information about the asterisk-users mailing list