diff options
Diffstat (limited to 'pjsip/include')
-rw-r--r-- | pjsip/include/pjsip/sip_transaction.h | 50 |
1 files changed, 49 insertions, 1 deletions
diff --git a/pjsip/include/pjsip/sip_transaction.h b/pjsip/include/pjsip/sip_transaction.h index 5be37ac4..e60f214d 100644 --- a/pjsip/include/pjsip/sip_transaction.h +++ b/pjsip/include/pjsip/sip_transaction.h @@ -85,7 +85,8 @@ struct pjsip_transaction pj_pool_t *pool; /**< Pool owned by the tsx. */ pjsip_module *tsx_user; /**< Transaction user. */ pjsip_endpoint *endpt; /**< Endpoint instance. */ - pj_mutex_t *mutex; /**< Mutex for this tsx. */ + pj_bool_t terminating; /**< terminate() was called */ + pj_grp_lock_t *grp_lock; /**< Transaction grp lock. */ pj_mutex_t *mutex_b; /**< Second mutex to avoid deadlock. It is used to protect timer. */ @@ -213,6 +214,30 @@ PJ_DECL(pj_status_t) pjsip_tsx_create_uac( pjsip_module *tsx_user, pjsip_transaction **p_tsx); /** + * Variant of pjsip_tsx_create_uac() with additional parameter to specify + * the group lock to use. Group lock can be used to synchronize locking + * among several objects to prevent deadlock, and to synchronize the + * lifetime of objects sharing the same group lock. + * + * See pjsip_tsx_create_uac() for general info about this function. + * + * @param tsx_user Module to be registered as transaction user of the new + * transaction, which will receive notification from the + * transaction via on_tsx_state() callback. + * @param tdata The outgoing request message. + * @param grp_lock Optional group lock to use by this transaction. If + * the value is NULL, the transaction will create its + * own group lock. + * @param p_tsx On return will contain the new transaction instance. + * + * @return PJ_SUCCESS if successfull. + */ +PJ_DECL(pj_status_t) pjsip_tsx_create_uac2(pjsip_module *tsx_user, + pjsip_tx_data *tdata, + pj_grp_lock_t *grp_lock, + pjsip_transaction **p_tsx); + +/** * Create, initialize, and register a new transaction as UAS from the * specified incoming request in \c rdata. After calling this function, * application MUST call #pjsip_tsx_recv_msg() so that transaction @@ -230,6 +255,29 @@ PJ_DECL(pj_status_t) pjsip_tsx_create_uas( pjsip_module *tsx_user, pjsip_rx_data *rdata, pjsip_transaction **p_tsx ); +/** + * Variant of pjsip_tsx_create_uas() with additional parameter to specify + * the group lock to use. Group lock can be used to synchronize locking + * among several objects to prevent deadlock, and to synchronize the + * lifetime of objects sharing the same group lock. + * + * See pjsip_tsx_create_uas() for general info about this function. + * + * @param tsx_user Module to be registered as transaction user of the new + * transaction, which will receive notification from the + * transaction via on_tsx_state() callback. + * @param rdata The received incoming request. + * @param grp_lock Optional group lock to use by this transaction. If + * the value is NULL, the transaction will create its + * own group lock. + * @param p_tsx On return will contain the new transaction instance. + * + * @return PJ_SUCCESS if successfull. + */ +PJ_DECL(pj_status_t) pjsip_tsx_create_uas2(pjsip_module *tsx_user, + pjsip_rx_data *rdata, + pj_grp_lock_t *grp_lock, + pjsip_transaction **p_tsx ); /** * Lock/bind transaction to a specific transport/listener. This is optional, |