Sfoglia il codice sorgente

core: xvavp - new data type SR_XTYPE_SPTR

- store a shm pointer that has to be freed at destroy with shm_free()
Daniel-Constantin Mierla 6 anni fa
parent
commit
126cfa51be
2 ha cambiato i file con 16 aggiunte e 3 eliminazioni
  1. 14 2
      src/core/xavp.c
  2. 2 1
      src/core/xavp.h

+ 14 - 2
src/core/xavp.c

@@ -57,6 +57,10 @@ void xavp_free(sr_xavp_t *xa)
 			xa->val.v.data->pfree(xa->val.v.data->p, xavp_shm_free);
 			shm_free(xa->val.v.data);
 		}
+	} else if(xa->val.type == SR_XTYPE_SPTR) {
+		if(xa->val.v.vptr) {
+			shm_free(xa->val.v.vptr);
+		}
 	} else if(xa->val.type == SR_XTYPE_XAVP) {
 		xavp_destroy_list(&xa->val.v.xavp);
 	}
@@ -70,6 +74,10 @@ void xavp_free_unsafe(sr_xavp_t *xa)
 			xa->val.v.data->pfree(xa->val.v.data->p, xavp_shm_free_unsafe);
 			shm_free_unsafe(xa->val.v.data);
 		}
+	} else if(xa->val.type == SR_XTYPE_SPTR) {
+		if(xa->val.v.vptr) {
+			shm_free_unsafe(xa->val.v.vptr);
+		}
 	} else if(xa->val.type == SR_XTYPE_XAVP) {
 		xavp_destroy_list_unsafe(&xa->val.v.xavp);
 	}
@@ -588,6 +596,9 @@ void xavp_print_list_content(sr_xavp_t **head, int level)
 			case SR_XTYPE_VPTR:
 				LM_INFO("     XAVP value: <vptr:%p>\n", avp->val.v.vptr);
 			break;
+			case SR_XTYPE_SPTR:
+				LM_INFO("     XAVP value: <sptr:%p>\n", avp->val.v.vptr);
+			break;
 			case SR_XTYPE_DATA:
 				LM_INFO("     XAVP value: <data:%p>\n", avp->val.v.data);
 			break;
@@ -697,7 +708,7 @@ sr_xavp_t *xavp_clone_level_nodata(sr_xavp_t *xold)
 	{
 		return NULL;
 	}
-	if(xold->val.type==SR_XTYPE_DATA)
+	if(xold->val.type==SR_XTYPE_DATA || xold->val.type==SR_XTYPE_SPTR)
 	{
 		LM_INFO("xavp value type is 'data' - ignoring in clone\n");
 		return NULL;
@@ -720,7 +731,8 @@ sr_xavp_t *xavp_clone_level_nodata(sr_xavp_t *xold)
 
 	while(oavp)
 	{
-		if(oavp->val.type!=SR_XTYPE_DATA && oavp->val.type!=SR_XTYPE_XAVP)
+		if(oavp->val.type!=SR_XTYPE_DATA && oavp->val.type!=SR_XTYPE_XAVP
+				&& oavp->val.type!=SR_XTYPE_SPTR)
 		{
 			navp =  xavp_new_value(&oavp->name, &oavp->val);
 			if(navp==NULL)

+ 2 - 1
src/core/xavp.h

@@ -33,7 +33,8 @@ typedef enum {
 	SR_XTYPE_LONG,    /* long value */
 	SR_XTYPE_LLONG,   /* long long value */
 	SR_XTYPE_XAVP,    /* xavp value */
-	SR_XTYPE_VPTR,    /* void pointer value */
+	SR_XTYPE_VPTR,    /* void pointer value (no free on destroy) */
+	SR_XTYPE_SPTR,    /* void pointer value (shm free on destroy) */
 	SR_XTYPE_DATA     /* custom data value */
 } sr_xtype_t;