diff --git a/third-party/pjproject/apply_patches b/third-party/pjproject/apply_patches index 69a0ad0..5f9fde2 100755 --- a/third-party/pjproject/apply_patches +++ b/third-party/pjproject/apply_patches @@ -28,16 +28,6 @@ if [ ! "$(ls -A $patchdir/*.patch 2>/dev/null)" ] ; then exit 0 fi -if patch --dry-run /dev/null 2>&1 ; then - DRY_RUN=--dry-run -else - DRY_RUN=-C -fi - -for patchfile in $patchdir/*.patch ; do - ${PATCH} -d $sourcedir -p1 -s -r- -f -N $DRY_RUN -i "$patchfile" || (echo "Patchfile $(basename $patchfile) failed to apply" >&2 ; exit 1) || exit 1 -done - for patchfile in "$patchdir"/*.patch ; do [ -z $quiet ] && echo "Applying patch $(basename $patchfile)" ${PATCH} -d "$sourcedir" -p1 -s -i "$patchfile" || exit 1 diff --git a/third-party/pjproject/patches/0007-BUGBUG-Add-debug-msgs.patch b/third-party/pjproject/patches/0007-BUGBUG-Add-debug-msgs.patch new file mode 100644 index 0000000..6f46765 --- /dev/null +++ b/third-party/pjproject/patches/0007-BUGBUG-Add-debug-msgs.patch @@ -0,0 +1,170 @@ +diff --git a/pjlib/include/pj/lock.h b/pjlib/include/pj/lock.h +index 9dc7448..17fadf0 100644 +--- a/pjlib/include/pj/lock.h ++++ b/pjlib/include/pj/lock.h +@@ -266,7 +266,9 @@ PJ_DECL(pj_status_t) pj_grp_lock_replace(pj_grp_lock_t *old_lock, + * + * @return PJ_SUCCESS or the appropriate error code. + */ +-PJ_DECL(pj_status_t) pj_grp_lock_acquire( pj_grp_lock_t *grp_lock); ++#define pj_grp_lock_acquire(grp_lock) pj_grp_lock_acquire_dbg(grp_lock, __FILE__, __LINE__, __PRETTY_FUNCTION__) ++ ++PJ_DECL(pj_status_t) pj_grp_lock_acquire_dbg(pj_grp_lock_t *grp_lock, const char *file, int line, const char *func); + + /** + * Acquire lock on the specified group lock if it is available, otherwise +@@ -276,7 +278,9 @@ PJ_DECL(pj_status_t) pj_grp_lock_acquire( pj_grp_lock_t *grp_lock); + * + * @return PJ_SUCCESS or the appropriate error code. + */ +-PJ_DECL(pj_status_t) pj_grp_lock_tryacquire( pj_grp_lock_t *grp_lock); ++#define pj_grp_lock_tryacquire(grp_lock) pj_grp_lock_tryacquire_dbg(grp_lock, __FILE__, __LINE__, __PRETTY_FUNCTION__) ++ ++PJ_DECL(pj_status_t) pj_grp_lock_tryacquire_dbg(pj_grp_lock_t *grp_lock, const char *file, int line, const char *func); + + /** + * Release the previously held lock. This may cause the group lock +@@ -287,7 +291,9 @@ PJ_DECL(pj_status_t) pj_grp_lock_tryacquire( pj_grp_lock_t *grp_lock); + * + * @return PJ_SUCCESS or the appropriate error code. + */ +-PJ_DECL(pj_status_t) pj_grp_lock_release( pj_grp_lock_t *grp_lock); ++#define pj_grp_lock_release(grp_lock) pj_grp_lock_release_dbg(grp_lock, __FILE__, __LINE__, __PRETTY_FUNCTION__) ++ ++PJ_DECL(pj_status_t) pj_grp_lock_release_dbg(pj_grp_lock_t *grp_lock, const char *file, int line, const char *func); + + /** + * Add a destructor handler, to be called by the group lock when it is +diff --git a/pjlib/src/pj/lock.c b/pjlib/src/pj/lock.c +index c6bfa55..d81cf42 100644 +--- a/pjlib/src/pj/lock.c ++++ b/pjlib/src/pj/lock.c +@@ -473,19 +473,27 @@ PJ_DEF(pj_status_t) pj_grp_lock_destroy( pj_grp_lock_t *grp_lock) + return grp_lock_destroy(grp_lock); + } + +-PJ_DEF(pj_status_t) pj_grp_lock_acquire( pj_grp_lock_t *grp_lock) ++PJ_DEF(pj_status_t) pj_grp_lock_acquire_dbg(pj_grp_lock_t *grp_lock, const char *file, int line, const char *func) + { +- return grp_lock_acquire(grp_lock); ++ pj_status_t status = grp_lock_acquire(grp_lock); ++ PJ_LOG(3,("grp_lock", "Acquired %p %s:%s(%d)", grp_lock, file, func, line)); ++ return status; + } + +-PJ_DEF(pj_status_t) pj_grp_lock_tryacquire( pj_grp_lock_t *grp_lock) ++PJ_DEF(pj_status_t) pj_grp_lock_tryacquire_dbg(pj_grp_lock_t *grp_lock, const char *file, int line, const char *func) + { +- return grp_lock_tryacquire(grp_lock); ++ pj_status_t status = grp_lock_tryacquire(grp_lock); ++ if (status == PJ_SUCCESS) { ++ PJ_LOG(3,("grp_lock", "Acquired %p %s:%s(%d)", grp_lock, file, func, line)); ++ } ++ return status; + } + +-PJ_DEF(pj_status_t) pj_grp_lock_release( pj_grp_lock_t *grp_lock) ++PJ_DEF(pj_status_t) pj_grp_lock_release_dbg(pj_grp_lock_t *grp_lock, const char *file, int line, const char *func) + { +- return grp_lock_release(grp_lock); ++ PJ_LOG(3,("grp_lock", "Released %p %s:%s(%d)", grp_lock, file, func, line)); ++ pj_status_t status = grp_lock_release(grp_lock); ++ return status; + } + + PJ_DEF(pj_status_t) pj_grp_lock_replace( pj_grp_lock_t *old_lock, +diff --git a/pjsip/include/pjsip/sip_transport.h b/pjsip/include/pjsip/sip_transport.h +index 78e3e1b..253c635 100644 +--- a/pjsip/include/pjsip/sip_transport.h ++++ b/pjsip/include/pjsip/sip_transport.h +@@ -652,7 +652,9 @@ PJ_DECL(pj_status_t) pjsip_tx_data_create( pjsip_tpmgr *mgr, + * + * @param tdata The transmit buffer. + */ +-PJ_DECL(void) pjsip_tx_data_add_ref( pjsip_tx_data *tdata ); ++#define pjsip_tx_data_add_ref(tdata) pjsip_tx_data_add_ref_dbg(tdata, __FILE__, __LINE__, __PRETTY_FUNCTION__) ++ ++PJ_DECL(void) pjsip_tx_data_add_ref_dbg(pjsip_tx_data *tdata, const char *file, int line, const char *func); + + /** + * Decrement reference counter of the transmit buffer. +@@ -664,7 +666,9 @@ PJ_DECL(void) pjsip_tx_data_add_ref( pjsip_tx_data *tdata ); + * status is non-zero. A status PJSIP_EBUFDESTROYED will be + * returned to inform that buffer is destroyed. + */ +-PJ_DECL(pj_status_t) pjsip_tx_data_dec_ref( pjsip_tx_data *tdata ); ++#define pjsip_tx_data_dec_ref(tdata) pjsip_tx_data_dec_ref_dbg(tdata, __FILE__, __LINE__, __PRETTY_FUNCTION__) ++ ++PJ_DECL(pj_status_t) pjsip_tx_data_dec_ref_dbg(pjsip_tx_data *tdata, const char *file, int line, const char *func); + + /** + * Print the SIP message to transmit data buffer's internal buffer. This +diff --git a/pjsip/src/pjsip/sip_transaction.c b/pjsip/src/pjsip/sip_transaction.c +index 30b7d40..b459171 100644 +--- a/pjsip/src/pjsip/sip_transaction.c ++++ b/pjsip/src/pjsip/sip_transaction.c +@@ -1023,6 +1023,7 @@ static pj_status_t tsx_create( pjsip_module *tsx_user, + + pj_grp_lock_add_ref(tsx->grp_lock); + } ++ PJ_LOG(3,(tsx->obj_name, "Transaction %p has group lock %p", tsx, tsx->grp_lock)); + + status = pj_mutex_create_simple(pool, tsx->obj_name, &tsx->mutex_b); + if (status != PJ_SUCCESS) { +@@ -1039,7 +1040,7 @@ static void tsx_on_destroy( void *arg ) + { + pjsip_transaction *tsx = (pjsip_transaction*)arg; + +- PJ_LOG(5,(tsx->obj_name, "Transaction destroyed!")); ++ PJ_LOG(3,(tsx->obj_name, "Transaction destroyed! group lock %p", tsx->grp_lock)); + + pj_mutex_destroy(tsx->mutex_b); + pjsip_endpt_release_pool(tsx->endpt, tsx->pool); +diff --git a/pjsip/src/pjsip/sip_transport.c b/pjsip/src/pjsip/sip_transport.c +index f87e47c..ae7b734 100644 +--- a/pjsip/src/pjsip/sip_transport.c ++++ b/pjsip/src/pjsip/sip_transport.c +@@ -459,14 +459,17 @@ PJ_DEF(pj_status_t) pjsip_tx_data_create( pjsip_tpmgr *mgr, + /* + * Add reference to tx buffer. + */ +-PJ_DEF(void) pjsip_tx_data_add_ref( pjsip_tx_data *tdata ) ++PJ_DEF(void) pjsip_tx_data_add_ref_dbg(pjsip_tx_data *tdata, const char *file, int line, const char *func) + { +- pj_atomic_inc(tdata->ref_cnt); ++ pj_atomic_value_t ref_cnt; ++ ref_cnt = pj_atomic_inc_and_get(tdata->ref_cnt); ++ PJ_LOG(3,(tdata->obj_name, "Add ref tdata: %p ref_cnt: %d %s:%s(%d)", ++ tdata, (int)ref_cnt, file, func, line)); + } + + static void tx_data_destroy(pjsip_tx_data *tdata) + { +- PJ_LOG(5,(tdata->obj_name, "Destroying txdata %s", ++ PJ_LOG(3,(tdata->obj_name, "Destroying txdata %s", + pjsip_tx_data_get_info(tdata))); + pjsip_tpselector_dec_ref(&tdata->tp_sel); + #if defined(PJ_DEBUG) && PJ_DEBUG!=0 +@@ -489,7 +492,7 @@ static void tx_data_destroy(pjsip_tx_data *tdata) + * Decrease transport data reference, destroy it when the reference count + * reaches zero. + */ +-PJ_DEF(pj_status_t) pjsip_tx_data_dec_ref( pjsip_tx_data *tdata ) ++PJ_DEF(pj_status_t) pjsip_tx_data_dec_ref_dbg(pjsip_tx_data *tdata, const char *file, int line, const char *func) + { + pj_atomic_value_t ref_cnt; + +@@ -498,9 +501,13 @@ PJ_DEF(pj_status_t) pjsip_tx_data_dec_ref( pjsip_tx_data *tdata ) + ref_cnt = pj_atomic_dec_and_get(tdata->ref_cnt); + pj_assert( ref_cnt >= 0); + if (ref_cnt == 0) { ++ PJ_LOG(3,(tdata->obj_name, "Destroying tdata: %p %s:%s(%d)", ++ tdata, file, func, line)); + tx_data_destroy(tdata); + return PJSIP_EBUFDESTROYED; + } else { ++ PJ_LOG(3,(tdata->obj_name, "Dec ref tdata: %p ref_cnt: %d %s:%s(%d)", ++ tdata, (int)ref_cnt, file, func, line)); + return PJ_SUCCESS; + } + } diff --git a/third-party/pjproject/patches/config_site.h b/third-party/pjproject/patches/config_site.h index 0694f12..940169d 100644 --- a/third-party/pjproject/patches/config_site.h +++ b/third-party/pjproject/patches/config_site.h @@ -34,7 +34,7 @@ #define PJ_SCANNER_USE_BITWISE 0 #define PJ_OS_HAS_CHECK_STACK 0 -#define PJ_LOG_MAX_LEVEL 3 +#define PJ_LOG_MAX_LEVEL 5 #define PJ_ENABLE_EXTRA_CHECK 1 #define PJSIP_MAX_TSX_COUNT ((64*1024)-1) #define PJSIP_MAX_DIALOG_COUNT ((64*1024)-1)