[Asterisk-code-review] res pjsip: Create human friendly serializer names. (asterisk[13])

Joshua Colp asteriskteam at digium.com
Tue Jan 12 13:59:42 CST 2016


Joshua Colp has submitted this change and it was merged.

Change subject: res_pjsip: Create human friendly serializer names.
......................................................................


res_pjsip: Create human friendly serializer names.

PJSIP name formats:
pjsip/aor/<aor>-<seq> -- registrar thread pool serializer
pjsip/default-<seq> -- default thread pool serializer
pjsip/messaging -- messaging thread pool serializer
pjsip/outreg/<registration>-<seq> -- outbound registration thread pool
serializer
pjsip/pubsub/<endpoint>-<seq> -- pubsub thread pool serializer
pjsip/refer/<endpoint>-<seq> -- REFER thread pool serializer
pjsip/session/<endpoint>-<seq> -- session thread pool serializer
pjsip/websocket-<seq> -- websocket thread pool serializer

Change-Id: Iff9df8da3ddae1132cb2ef65f64df0c465c5e084
---
M include/asterisk/res_pjsip.h
M res/res_pjsip.c
M res/res_pjsip_messaging.c
M res/res_pjsip_outbound_registration.c
M res/res_pjsip_pubsub.c
M res/res_pjsip_refer.c
M res/res_pjsip_registrar.c
M res/res_pjsip_session.c
M res/res_pjsip_transport_websocket.c
9 files changed, 103 insertions(+), 22 deletions(-)

Approvals:
  Kevin Harwell: Looks good to me, but someone else must approve
  Anonymous Coward #1000019: Verified
  Joshua Colp: Looks good to me, approved



diff --git a/include/asterisk/res_pjsip.h b/include/asterisk/res_pjsip.h
index 6ca56bd..17fcd2b 100644
--- a/include/asterisk/res_pjsip.h
+++ b/include/asterisk/res_pjsip.h
@@ -1124,6 +1124,21 @@
  */
 struct ast_taskprocessor *ast_sip_create_serializer(void);
 
+/*!
+ * \brief Create a new serializer for SIP tasks
+ * \since 13.8.0
+ *
+ * See \ref ast_threadpool_serializer for more information on serializers.
+ * SIP creates serializers so that tasks operating on similar data will run
+ * in sequence.
+ *
+ * \param name Name of the serializer. (must be unique)
+ *
+ * \retval NULL Failure
+ * \retval non-NULL Newly-created serializer
+ */
+struct ast_taskprocessor *ast_sip_create_serializer_named(const char *name);
+
 struct ast_serializer_shutdown_group;
 
 /*!
@@ -1142,6 +1157,22 @@
 struct ast_taskprocessor *ast_sip_create_serializer_group(struct ast_serializer_shutdown_group *shutdown_group);
 
 /*!
+ * \brief Create a new serializer for SIP tasks
+ * \since 13.8.0
+ *
+ * See \ref ast_threadpool_serializer for more information on serializers.
+ * SIP creates serializers so that tasks operating on similar data will run
+ * in sequence.
+ *
+ * \param name Name of the serializer. (must be unique)
+ * \param shutdown_group Group shutdown controller. (NULL if no group association)
+ *
+ * \retval NULL Failure
+ * \retval non-NULL Newly-created serializer
+ */
+struct ast_taskprocessor *ast_sip_create_serializer_group_named(const char *name, struct ast_serializer_shutdown_group *shutdown_group);
+
+/*!
  * \brief Set a serializer on a SIP dialog so requests and responses are automatically serialized
  *
  * Passing a NULL serializer is a way to remove a serializer from a dialog.
diff --git a/res/res_pjsip.c b/res/res_pjsip.c
index 8e99c55..3c392f0 100644
--- a/res/res_pjsip.c
+++ b/res/res_pjsip.c
@@ -3379,23 +3379,34 @@
 	return 0;
 }
 
+struct ast_taskprocessor *ast_sip_create_serializer_group_named(const char *name, struct ast_serializer_shutdown_group *shutdown_group)
+{
+	return ast_threadpool_serializer_group(name, sip_threadpool, shutdown_group);
+}
+
 struct ast_taskprocessor *ast_sip_create_serializer_group(struct ast_serializer_shutdown_group *shutdown_group)
 {
-	struct ast_taskprocessor *serializer;
-	char name[AST_UUID_STR_LEN];
+	char tps_name[AST_TASKPROCESSOR_MAX_NAME + 1];
 
-	ast_uuid_generate_str(name, sizeof(name));
+	/* Create name with seq number appended. */
+	ast_taskprocessor_build_name(tps_name, sizeof(tps_name), "pjsip-group-serializer");
 
-	serializer = ast_threadpool_serializer_group(name, sip_threadpool, shutdown_group);
-	if (!serializer) {
-		return NULL;
-	}
-	return serializer;
+	return ast_sip_create_serializer_group_named(tps_name, shutdown_group);
+}
+
+struct ast_taskprocessor *ast_sip_create_serializer_named(const char *name)
+{
+	return ast_sip_create_serializer_group_named(name, NULL);
 }
 
 struct ast_taskprocessor *ast_sip_create_serializer(void)
 {
-	return ast_sip_create_serializer_group(NULL);
+	char tps_name[AST_TASKPROCESSOR_MAX_NAME + 1];
+
+	/* Create name with seq number appended. */
+	ast_taskprocessor_build_name(tps_name, sizeof(tps_name), "pjsip-serializer");
+
+	return ast_sip_create_serializer_group_named(tps_name, NULL);
 }
 
 /*!
@@ -3425,10 +3436,14 @@
  */
 static int serializer_pool_setup(void)
 {
+	char tps_name[AST_TASKPROCESSOR_MAX_NAME + 1];
 	int idx;
 
 	for (idx = 0; idx < SERIALIZER_POOL_SIZE; ++idx) {
-		serializer_pool[idx] = ast_sip_create_serializer();
+		/* Create name with seq number appended. */
+		ast_taskprocessor_build_name(tps_name, sizeof(tps_name), "pjsip/default");
+
+		serializer_pool[idx] = ast_sip_create_serializer_named(tps_name);
 		if (!serializer_pool[idx]) {
 			serializer_pool_shutdown();
 			return -1;
diff --git a/res/res_pjsip_messaging.c b/res/res_pjsip_messaging.c
index dab70ca..54880db 100644
--- a/res/res_pjsip_messaging.c
+++ b/res/res_pjsip_messaging.c
@@ -758,7 +758,7 @@
 		return AST_MODULE_LOAD_DECLINE;
 	}
 
-	message_serializer = ast_sip_create_serializer();
+	message_serializer = ast_sip_create_serializer_named("pjsip/messaging");
 	if (!message_serializer) {
 		ast_sip_unregister_service(&messaging_module);
 		ast_msg_tech_unregister(&msg_tech);
diff --git a/res/res_pjsip_outbound_registration.c b/res/res_pjsip_outbound_registration.c
index 4ba5748..a2fefde 100644
--- a/res/res_pjsip_outbound_registration.c
+++ b/res/res_pjsip_outbound_registration.c
@@ -977,6 +977,7 @@
 static struct sip_outbound_registration_state *sip_outbound_registration_state_alloc(struct sip_outbound_registration *registration)
 {
 	struct sip_outbound_registration_state *state;
+	char tps_name[AST_TASKPROCESSOR_MAX_NAME + 1];
 
 	state = ao2_alloc(sizeof(*state), sip_outbound_registration_state_destroy);
 	if (!state) {
@@ -989,7 +990,12 @@
 		return NULL;
 	}
 
-	state->client_state->serializer = ast_sip_create_serializer_group(shutdown_group);
+	/* Create name with seq number appended. */
+	ast_taskprocessor_build_name(tps_name, sizeof(tps_name), "pjsip/outreg/%s",
+		ast_sorcery_object_get_id(registration));
+
+	state->client_state->serializer = ast_sip_create_serializer_group_named(tps_name,
+		shutdown_group);
 	if (!state->client_state->serializer) {
 		ao2_cleanup(state);
 		return NULL;
diff --git a/res/res_pjsip_pubsub.c b/res/res_pjsip_pubsub.c
index 99376b1..cdd1e80 100644
--- a/res/res_pjsip_pubsub.c
+++ b/res/res_pjsip_pubsub.c
@@ -1234,6 +1234,7 @@
 static struct sip_subscription_tree *allocate_subscription_tree(struct ast_sip_endpoint *endpoint)
 {
 	struct sip_subscription_tree *sub_tree;
+	char tps_name[AST_TASKPROCESSOR_MAX_NAME + 1];
 
 	sub_tree = ao2_alloc(sizeof *sub_tree, subscription_tree_destructor);
 	if (!sub_tree) {
@@ -1242,7 +1243,11 @@
 
 	ast_module_ref(ast_module_info->self);
 
-	sub_tree->serializer = ast_sip_create_serializer();
+	/* Create name with seq number appended. */
+	ast_taskprocessor_build_name(tps_name, sizeof(tps_name), "pjsip/pubsub/%s",
+		ast_sorcery_object_get_id(endpoint));
+
+	sub_tree->serializer = ast_sip_create_serializer_named(tps_name);
 	if (!sub_tree->serializer) {
 		ao2_ref(sub_tree, -1);
 		return NULL;
diff --git a/res/res_pjsip_refer.c b/res/res_pjsip_refer.c
index 4896a00..c23097e 100644
--- a/res/res_pjsip_refer.c
+++ b/res/res_pjsip_refer.c
@@ -342,6 +342,7 @@
 	const pj_str_t str_true = { "true", 4 };
 	pjsip_tx_data *tdata;
 	pjsip_hdr hdr_list;
+	char tps_name[AST_TASKPROCESSOR_MAX_NAME + 1];
 
 	*progress = NULL;
 
@@ -363,7 +364,11 @@
 	/* To prevent a potential deadlock we need the dialog so we can lock/unlock */
 	(*progress)->dlg = session->inv_session->dlg;
 
-	if (!((*progress)->serializer = ast_sip_create_serializer())) {
+	/* Create name with seq number appended. */
+	ast_taskprocessor_build_name(tps_name, sizeof(tps_name), "pjsip/refer/%s",
+		ast_sorcery_object_get_id(session->endpoint));
+
+	if (!((*progress)->serializer = ast_sip_create_serializer_named(tps_name))) {
 		goto error;
 	}
 
diff --git a/res/res_pjsip_registrar.c b/res/res_pjsip_registrar.c
index fed4393..b0f8d66 100644
--- a/res/res_pjsip_registrar.c
+++ b/res/res_pjsip_registrar.c
@@ -231,6 +231,7 @@
 
 static struct serializer *serializer_create(const char *aor_name)
 {
+	char tps_name[AST_TASKPROCESSOR_MAX_NAME + 1];
 	size_t size = strlen(aor_name) + 1;
 	struct serializer *ser = ao2_alloc(
 		sizeof(*ser) + size, serializer_destroy);
@@ -239,7 +240,11 @@
 		return NULL;
 	}
 
-	if (!(ser->serializer = ast_sip_create_serializer())) {
+	/* Create name with seq number appended. */
+	ast_taskprocessor_build_name(tps_name, sizeof(tps_name), "pjsip/aor/%s",
+		aor_name);
+
+	if (!(ser->serializer = ast_sip_create_serializer_named(tps_name))) {
 		ao2_ref(ser, -1);
 		return NULL;
 	}
diff --git a/res/res_pjsip_session.c b/res/res_pjsip_session.c
index 6044ceb..4f5071f 100644
--- a/res/res_pjsip_session.c
+++ b/res/res_pjsip_session.c
@@ -1266,6 +1266,7 @@
 	RAII_VAR(struct ast_sip_session *, session, NULL, ao2_cleanup);
 	struct ast_sip_session_supplement *iter;
 	int dsp_features = 0;
+	char tps_name[AST_TASKPROCESSOR_MAX_NAME + 1];
 
 	session = ao2_alloc(sizeof(*session), session_destructor);
 	if (!session) {
@@ -1286,7 +1287,11 @@
 	/* fill session->media with available types */
 	ao2_callback(sdp_handlers, OBJ_NODATA, add_session_media, session);
 
-	session->serializer = ast_sip_create_serializer();
+	/* Create name with seq number appended. */
+	ast_taskprocessor_build_name(tps_name, sizeof(tps_name), "pjsip/session/%s",
+		ast_sorcery_object_get_id(endpoint));
+
+	session->serializer = ast_sip_create_serializer_named(tps_name);
 	if (!session->serializer) {
 		return NULL;
 	}
diff --git a/res/res_pjsip_transport_websocket.c b/res/res_pjsip_transport_websocket.c
index a49eade..668129b 100644
--- a/res/res_pjsip_transport_websocket.c
+++ b/res/res_pjsip_transport_websocket.c
@@ -303,14 +303,22 @@
 	return write_timeout;
 }
 
-/*!
- \brief WebSocket connection handler.
- */
+static struct ast_taskprocessor *create_websocket_serializer(void)
+{
+	char tps_name[AST_TASKPROCESSOR_MAX_NAME + 1];
+
+	/* Create name with seq number appended. */
+	ast_taskprocessor_build_name(tps_name, sizeof(tps_name), "pjsip/websocket");
+
+	return ast_sip_create_serializer_named(tps_name);
+}
+
+/*! \brief WebSocket connection handler. */
 static void websocket_cb(struct ast_websocket *session, struct ast_variable *parameters, struct ast_variable *headers)
 {
-	struct ast_taskprocessor *serializer = NULL;
+	struct ast_taskprocessor *serializer;
 	struct transport_create_data create_data;
-	struct ws_transport *transport = NULL;
+	struct ws_transport *transport;
 	struct transport_read_data read_data;
 
 	if (ast_websocket_set_nonblock(session)) {
@@ -323,7 +331,8 @@
 		return;
 	}
 
-	if (!(serializer = ast_sip_create_serializer())) {
+	serializer = create_websocket_serializer();
+	if (!serializer) {
 		ast_websocket_unref(session);
 		return;
 	}

-- 
To view, visit https://gerrit.asterisk.org/1949
To unsubscribe, visit https://gerrit.asterisk.org/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Iff9df8da3ddae1132cb2ef65f64df0c465c5e084
Gerrit-PatchSet: 2
Gerrit-Project: asterisk
Gerrit-Branch: 13
Gerrit-Owner: Richard Mudgett <rmudgett at digium.com>
Gerrit-Reviewer: Anonymous Coward #1000019
Gerrit-Reviewer: Joshua Colp <jcolp at digium.com>
Gerrit-Reviewer: Kevin Harwell <kharwell at digium.com>



More information about the asterisk-code-review mailing list