Bläddra i källkod

dmq: handle failure to build callback parameter

Alex Hermann 11 år sedan
förälder
incheckning
e98c601c43
1 ändrade filer med 13 tillägg och 0 borttagningar
  1. 13 0
      modules/dmq/dmq_funcs.c

+ 13 - 0
modules/dmq/dmq_funcs.c

@@ -211,9 +211,17 @@ int dmq_send_message(dmq_peer_t* peer, str* body, dmq_node_t* node,
 	str_hdr.len = len;
 	str_hdr.len = len;
 	
 	
 	cb_param = shm_malloc(sizeof(*cb_param));
 	cb_param = shm_malloc(sizeof(*cb_param));
+	if (cb_param == NULL) {
+		LM_ERR("no more shm for building callback parameter\n");
+		goto error;
+	}
 	memset(cb_param, 0, sizeof(*cb_param));
 	memset(cb_param, 0, sizeof(*cb_param));
 	cb_param->resp_cback = *resp_cback;
 	cb_param->resp_cback = *resp_cback;
 	cb_param->node = shm_dup_node(node);
 	cb_param->node = shm_dup_node(node);
+	if (cb_param->node == NULL) {
+		LM_ERR("error building callback parameter\n");
+		goto error;
+	}
 	
 	
 	if(build_uri_str(&peer->peer_id, &dmq_server_uri, &from) < 0) {
 	if(build_uri_str(&peer->peer_id, &dmq_server_uri, &from) < 0) {
 		LM_ERR("error building from string [username %.*s]\n",
 		LM_ERR("error building from string [username %.*s]\n",
@@ -246,6 +254,11 @@ error:
 		pkg_free(from.s);
 		pkg_free(from.s);
 	if (to.s!=NULL) 
 	if (to.s!=NULL) 
 		pkg_free(to.s);
 		pkg_free(to.s);
+	if (cb_param) {
+		if (cb_param->node)
+			destroy_dmq_node(cb_param->node, 1);
+		shm_free(cb_param);
+	}
 	return -1;
 	return -1;
 }
 }