浏览代码

ims_*_scscf: Safety checks for the locks

Carsten Bock 10 年之前
父节点
当前提交
36b1cfe97f
共有 2 个文件被更改,包括 18 次插入2 次删除
  1. 6 1
      modules/ims_registrar_scscf/registrar_notify.c
  2. 12 1
      modules/ims_registrar_scscf/userdata_parser.c

+ 6 - 1
modules/ims_registrar_scscf/registrar_notify.c

@@ -122,7 +122,12 @@ int notify_init() {
 	LM_ERR("failed to create cdp event list lock\n");
 	return 0;
     }
-    notification_list->lock = lock_init(notification_list->lock);
+    if (lock_init(notification_list->lock)==0){
+       lock_dealloc(notification_list->lock);
+       notification_list->lock=0;
+       LM_ERR("failed to initialize cdp event list lock\n");
+       return 0;
+    }
     notification_list->size = 0;
     sem_new(notification_list->empty, 0); //pre-locked - as we assume list is empty at start
     return 1;

+ 12 - 1
modules/ims_registrar_scscf/userdata_parser.c

@@ -860,7 +860,18 @@ static ims_subscription* parse_ims_subscription(xmlDocPtr doc, xmlNodePtr root)
 					s->service_profiles_cnt++;
 			}				
 	s->lock = lock_alloc();
-	s->lock = lock_init(s->lock);
+	if (s->lock==0) {
+		LM_ERR("Failed to allocate Lock for IMS Subscription\n");
+		shm_free(s);
+		return 0;
+	}
+	if (lock_init(s->lock)==0){
+		LM_ERR("Failed to initialize Lock for IMS Subscription\n");
+		lock_dealloc(s->lock);
+		s->lock=0;
+		shm_free(s);
+		return 0;
+	}
 	return s;
 }