All pastes #1457049 Raw Edit

Someone

public diff v1 · immutable
#1457049 ·published 2009-06-11 20:38 UTC
rendered paste body
Index: apps/app_voicemail.c===================================================================--- apps/app_voicemail.c	(revision 199221)+++ apps/app_voicemail.c	(working copy)@@ -5017,7 +5017,7 @@ 			else if (!strncmp(mwi_msg->cause, "BLK", 3)) 				ast_log(AST_LOG_WARNING, "MWI light was already on or off for %s\n", mwi_msg->fwd_st); 			ast_log(AST_LOG_WARNING, "The switch reported '%s'\n", mwi_msg->cause);-			ASTOBJ_UNREF(mwi_msg, ast_smdi_mwi_message_destroy);+			//ASTOBJ_UNREF(mwi_msg, ast_smdi_mwi_message_destroy); 		} else { 			ast_debug(1, "Successfully executed SMDI MWI change for %s\n", extension); 		}Index: include/asterisk/smdi.h===================================================================--- include/asterisk/smdi.h	(revision 199221)+++ include/asterisk/smdi.h	(working copy)@@ -37,6 +37,7 @@ #include "asterisk/config.h" #include "asterisk/module.h" #include "asterisk/astobj.h"+#include "asterisk/linkedlists.h" #include "asterisk/optional_api.h"  #define SMDI_MESG_DESK_NUM_LEN 3@@ -53,7 +54,7 @@  * ast_smdi_mwi_message structures.   */ struct ast_smdi_mwi_message {-	ASTOBJ_COMPONENTS(struct ast_smdi_mwi_message);+	AST_LIST_ENTRY(ast_smdi_mwi_message) entry; 	char fwd_st[SMDI_MAX_STATION_NUM_LEN + 1];		/* forwarding station number */ 	char cause[SMDI_MWI_FAIL_CAUSE_LEN + 1];		/* the type of failure */ 	struct timeval timestamp;				/* a timestamp for the message */@@ -67,7 +68,7 @@  * ast_smdi_md_message structures.   */ struct ast_smdi_md_message {-	ASTOBJ_COMPONENTS(struct ast_smdi_md_message);+	AST_LIST_ENTRY(ast_smdi_md_message) entry; 	char mesg_desk_num[SMDI_MESG_DESK_NUM_LEN + 1];		/* message desk number */ 	char mesg_desk_term[SMDI_MESG_DESK_TERM_LEN + 1];	/* message desk terminal */ 	char fwd_st[SMDI_MAX_STATION_NUM_LEN + 1];		/* forwarding station number */Index: res/res_smdi.c===================================================================--- res/res_smdi.c	(revision 199221)+++ res/res_smdi.c	(working copy)@@ -153,22 +153,12 @@  static const char config_file[] = "smdi.conf"; -/*! \brief SMDI message desk message queue. */-struct ast_smdi_md_queue {-	ASTOBJ_CONTAINER_COMPONENTS(struct ast_smdi_md_message);-};--/*! \brief SMDI message waiting indicator message queue. */-struct ast_smdi_mwi_queue {-	ASTOBJ_CONTAINER_COMPONENTS(struct ast_smdi_mwi_message);-};- struct ast_smdi_interface { 	ASTOBJ_COMPONENTS_FULL(struct ast_smdi_interface, SMDI_MAX_FILENAME_LEN, 1);-	struct ast_smdi_md_queue md_q;+	AST_LIST_HEAD_NOLOCK(, ast_smdi_md_queue) md_q; 	ast_mutex_t md_q_lock; 	ast_cond_t md_q_cond;-	struct ast_smdi_mwi_queue mwi_q;+	AST_LIST_HEAD_NOLOCK(, ast_smdi_mwi_queue) mwi_q; 	ast_mutex_t mwi_q_lock; 	ast_cond_t mwi_q_cond; 	FILE *file;@@ -225,6 +215,8 @@  static void ast_smdi_interface_destroy(struct ast_smdi_interface *iface) {+	struct ast_smdi_md_message *md; +	struct ast_smdi_mwi_message *mwi;  	if (iface->thread != AST_PTHREADT_NULL && iface->thread != AST_PTHREADT_STOP) { 		pthread_cancel(iface->thread); 		pthread_join(iface->thread, NULL);@@ -235,10 +227,10 @@ 	if (iface->file)  		fclose(iface->file); 	-	ASTOBJ_CONTAINER_DESTROYALL(&iface->md_q, ast_smdi_md_message_destroy);-	ASTOBJ_CONTAINER_DESTROYALL(&iface->mwi_q, ast_smdi_mwi_message_destroy);-	ASTOBJ_CONTAINER_DESTROY(&iface->md_q);-	ASTOBJ_CONTAINER_DESTROY(&iface->mwi_q);+	while ((mwi = AST_LIST_REMOVE_HEAD(&iface->mwi_q, entry)))+		ast_smdi_mwi_message_destroy(mwi);+	while ((md = AST_LIST_REMOVE_HEAD(&iface->md_q, entry)))+		ast_smdi_md_message_destroy(md);  	ast_mutex_destroy(&iface->md_q_lock); 	ast_cond_destroy(&iface->md_q_cond);@@ -265,7 +257,7 @@ static void ast_smdi_md_message_push(struct ast_smdi_interface *iface, struct ast_smdi_md_message *md_msg) { 	ast_mutex_lock(&iface->md_q_lock);-	ASTOBJ_CONTAINER_LINK_END(&iface->md_q, md_msg);+	AST_LIST_INSERT_TAIL(&iface->md_q, md_msg, entry); 	ast_cond_broadcast(&iface->md_q_cond); 	ast_mutex_unlock(&iface->md_q_lock); }@@ -279,7 +271,7 @@ static void ast_smdi_mwi_message_push(struct ast_smdi_interface *iface, struct ast_smdi_mwi_message *mwi_msg) { 	ast_mutex_lock(&iface->mwi_q_lock);-	ASTOBJ_CONTAINER_LINK_END(&iface->mwi_q, mwi_msg);+	AST_LIST_INSERT_TAIL(&iface->mwi_q, mwi_msg, entry); 	ast_cond_broadcast(&iface->mwi_q_cond); 	ast_mutex_unlock(&iface->mwi_q_lock); }@@ -324,7 +316,7 @@ void ast_smdi_md_message_putback(struct ast_smdi_interface *iface, struct ast_smdi_md_message *md_msg) { 	ast_mutex_lock(&iface->md_q_lock);-	ASTOBJ_CONTAINER_LINK_START(&iface->md_q, md_msg);+	AST_LIST_INSERT_HEAD(&iface->md_q, md_msg, entry); 	ast_cond_broadcast(&iface->md_q_cond); 	ast_mutex_unlock(&iface->md_q_lock); }@@ -332,7 +324,7 @@ void ast_smdi_mwi_message_putback(struct ast_smdi_interface *iface, struct ast_smdi_mwi_message *mwi_msg) { 	ast_mutex_lock(&iface->mwi_q_lock);-	ASTOBJ_CONTAINER_LINK_START(&iface->mwi_q, mwi_msg);+	AST_LIST_INSERT_HEAD(&iface->mwi_q, mwi_msg, entry); 	ast_cond_broadcast(&iface->mwi_q_cond); 	ast_mutex_unlock(&iface->mwi_q_lock); }@@ -370,9 +362,11 @@ { 	switch (type) { 	case SMDI_MWI:-		return ASTOBJ_CONTAINER_UNLINK_START(&iface->mwi_q);+		return AST_LIST_REMOVE_HEAD(&iface->mwi_q, entry);+		//return ASTOBJ_CONTAINER_UNLINK_START(&iface->mwi_q); 	case SMDI_MD:-		return ASTOBJ_CONTAINER_UNLINK_START(&iface->md_q);+		return AST_LIST_REMOVE_HEAD(&iface->md_q, entry);+		//return ASTOBJ_CONTAINER_UNLINK_START(&iface->md_q); 	} 	return NULL; }@@ -392,17 +386,17 @@ 	return ast_tv(0, 0); } -static inline void unref_msg(void *msg, enum smdi_message_type type)+static inline void unref_msg(void *msg, enum smdi_message_type type, struct ast_smdi_interface *iface) { 	struct ast_smdi_md_message *md_msg = msg; 	struct ast_smdi_mwi_message *mwi_msg = msg;  	switch (type) { 	case SMDI_MWI:-		ASTOBJ_UNREF(mwi_msg, ast_smdi_mwi_message_destroy);+		AST_LIST_REMOVE(&iface->mwi_q, mwi_msg, entry); 		break; 	case SMDI_MD:-		ASTOBJ_UNREF(md_msg, ast_smdi_md_message_destroy);+		AST_LIST_REMOVE(&iface->md_q, md_msg, entry); 		break; 	} }@@ -423,7 +417,7 @@  		if (elapsed > iface->msg_expiry) { 			/* found an expired message */-			unref_msg(msg, type);+			unref_msg(msg, type, iface); 			ast_log(LOG_NOTICE, "Purged expired message from %s SMDI %s message queue.  " 				"Message was %ld milliseconds too old.\n", 				iface->name, (type == SMDI_MD) ? "MD" : "MWI", @@ -442,7 +436,7 @@ 				ast_smdi_mwi_message_push(iface, msg); 				break; 			}-			unref_msg(msg, type);+			unref_msg(msg, type, iface); 			break; 		} 	}@@ -476,25 +470,19 @@ 	switch (type) { 	case SMDI_MD: 		if (ast_strlen_zero(search_key)) {-			struct ast_smdi_md_message *md_msg = NULL;- 			/* No search key provided (the code from chan_dahdi does this). 			 * Just pop the top message off of the queue. */--			ASTOBJ_CONTAINER_TRAVERSE(&iface->md_q, !md_msg, do {-				md_msg = ASTOBJ_REF(iterator);-			} while (0); );--			msg = md_msg;+			msg = AST_LIST_FIRST(iface->md_q); 		} else if (ast_test_flag(&options, OPT_SEARCH_TERMINAL)) { 			struct ast_smdi_md_message *md_msg = NULL;  			/* Searching by the message desk terminal */ -			ASTOBJ_CONTAINER_TRAVERSE(&iface->md_q, !md_msg, do {-				if (!strcasecmp(iterator->mesg_desk_term, search_key))-					md_msg = ASTOBJ_REF(iterator);-			} while (0); );+			//ASTOBJ_CONTAINER_TRAVERSE(&iface->md_q, !md_msg, do {+			AST_LIST_TRAVERSE(&iface->md_q, md_msg, entry) {+				if (!strcasecmp(md_msg->mesg_desk_term, search_key))+					break;+			}   			msg = md_msg; 		} else if (ast_test_flag(&options, OPT_SEARCH_NUMBER)) {@@ -502,31 +490,38 @@  			/* Searching by the message desk number */ -			ASTOBJ_CONTAINER_TRAVERSE(&iface->md_q, !md_msg, do {-				if (!strcasecmp(iterator->mesg_desk_num, search_key))-					md_msg = ASTOBJ_REF(iterator);-			} while (0); );+			//ASTOBJ_CONTAINER_TRAVERSE(&iface->md_q, !md_msg, do {+			AST_LIST_TRAVERSE(&iface->md_q, md_msg, entry) {+				if (!strcasecmp(md_msg->mesg_desk_num, search_key))+					break;+			}  			msg = md_msg; 		} else {+			struct ast_smdi_md_message *md_msg = NULL; 			/* Searching by the forwarding station */-			msg = ASTOBJ_CONTAINER_FIND(&iface->md_q, search_key);+			AST_LIST_TRAVERSE(&iface->md_q, md_msg, entry) {+				if (!strcasecmp(md_msg->fwd_st, search_key))+					break;+			}+			msg = md_msg; 		} 		break; 	case SMDI_MWI: 		if (ast_strlen_zero(search_key)) {-			struct ast_smdi_mwi_message *mwi_msg = NULL;  			/* No search key provided (the code from chan_dahdi does this). 			 * Just pop the top message off of the queue. */ -			ASTOBJ_CONTAINER_TRAVERSE(&iface->mwi_q, !mwi_msg, do {-				mwi_msg = ASTOBJ_REF(iterator);-			} while (0); );--			msg = mwi_msg;+			msg = AST_LIST_FIRST(&iface->mwi_q); 		} else {-			msg = ASTOBJ_CONTAINER_FIND(&iface->mwi_q, search_key);+			struct ast_smdi_mwi_message *mwi_msg = NULL;+			/* Searching by the forwarding station */+			AST_LIST_TRAVERSE(&iface->mwi_q, mwi_msg, entry) {+				if (!strcasecmp(mwi_msg->fwd_st, search_key))+					break;+			}+			msg = mwi_msg; 		} 		break; 	}@@ -665,7 +660,7 @@ 				return NULL; 			} 			-			ASTOBJ_INIT(md_msg);+			//ASTOBJ_INIT(md_msg);  			/* read the message desk number */ 			for (i = 0; i < sizeof(md_msg->mesg_desk_num) - 1; i++) {@@ -718,7 +713,7 @@  			/* Put the fwd_st in the name field so that we can use ASTOBJ_FIND to look 			 * up a message on this field */-			ast_copy_string(md_msg->name, md_msg->fwd_st, sizeof(md_msg->name));+			//ast_copy_string(md_msg->name, md_msg->fwd_st, sizeof(md_msg->name));  			/* read the calling station number (may be blank) */ 			cp = &md_msg->calling_st[0];@@ -755,7 +750,7 @@ 			ast_smdi_md_message_push(iface, md_msg); 			ast_log(LOG_DEBUG, "Recieved SMDI MD message on %s\n", iface->name); 			-			ASTOBJ_UNREF(md_msg, ast_smdi_md_message_destroy);+			//ASTOBJ_UNREF(md_msg, ast_smdi_md_message_destroy);  		} else if (c == 'W') { /* MWI message */ 			start = 0;@@ -767,7 +762,7 @@ 				return NULL; 			} -			ASTOBJ_INIT(mwi_msg);+			//ASTOBJ_INIT(mwi_msg);  			/* discard the 'I' (from 'MWI') */ 			fgetc(iface->file);@@ -791,7 +786,7 @@ 			 			/* Put the fwd_st in the name field so that we can use ASTOBJ_FIND to look 			 * up a message on this field */-			ast_copy_string(mwi_msg->name, mwi_msg->fwd_st, sizeof(mwi_msg->name));+			//ast_copy_string(mwi_msg->name, mwi_msg->fwd_st, sizeof(mwi_msg->name));  			/* read the mwi failure cause */ 			for (i = 0; i < sizeof(mwi_msg->cause) - 1; i++)@@ -804,7 +799,7 @@ 			ast_smdi_mwi_message_push(iface, mwi_msg); 			ast_log(LOG_DEBUG, "Recieved SMDI MWI message on %s\n", iface->name); 			-			ASTOBJ_UNREF(mwi_msg, ast_smdi_mwi_message_destroy);+			//ASTOBJ_UNREF(mwi_msg, ast_smdi_mwi_message_destroy); 		} else { 			ast_log(LOG_ERROR, "Unknown SMDI message type recieved on %s (M%c).\n", iface->name, c); 			start = 0;@@ -930,8 +925,10 @@ 		return NULL;  	ASTOBJ_INIT(iface);-	ASTOBJ_CONTAINER_INIT(&iface->md_q);-	ASTOBJ_CONTAINER_INIT(&iface->mwi_q);+	//ASTOBJ_CONTAINER_INIT(&iface->md_q);+	//AST_LIST_HEAD_NOLOCK_INIT_VALUE(&iface->md_q);+	//ASTOBJ_CONTAINER_INIT(&iface->mwi_q);+	//AST_LIST_HEAD_NOLOCK_INIT_VALUE(&iface->mwi_q);  	ast_mutex_init(&iface->md_q_lock); 	ast_cond_init(&iface->md_q_cond, NULL);@@ -1192,8 +1189,8 @@ 	if (smd->iface) 		ASTOBJ_UNREF(smd->iface, ast_smdi_interface_destroy); -	if (smd->md_msg)-		ASTOBJ_UNREF(smd->md_msg, ast_smdi_md_message_destroy);+//	if (smd->md_msg)+//		ASTOBJ_UNREF(smd->md_msg, ast_smdi_md_message_destroy);  	free(smd); }@@ -1279,7 +1276,7 @@ 		goto return_error;  	smd->iface = ASTOBJ_REF(iface);-	smd->md_msg = ASTOBJ_REF(md_msg);+	smd->md_msg = md_msg; 	smd->id = ast_atomic_fetchadd_int((int *) &smdi_msg_id, 1); 	snprintf(buf, len, "%u", smd->id); @@ -1298,8 +1295,8 @@ 	if (iface) 		ASTOBJ_UNREF(iface, ast_smdi_interface_destroy); -	if (md_msg)-		ASTOBJ_UNREF(md_msg, ast_smdi_md_message_destroy);+//	if (md_msg)+//		ASTOBJ_UNREF(md_msg, ast_smdi_md_message_destroy);  	if (smd && !datastore) 		smdi_msg_datastore_destroy(smd);