已合并
fix coap mutex #11198
fix coap mutex #11198
已合并
wangJE创建于 2025年10月31日
共 7 个文件变更+23-20
@@ -84,7 +84,7 @@ int32_t DiscFillBtype(uint32_t capability, uint32_t allCap, NSTACKX_DiscoverySet
84}84}
85 85 
86int32_t DiscCoapProcessDeviceInfo(const NSTACKX_DeviceInfo *nstackxInfo, DeviceInfo *devInfo,86int32_t DiscCoapProcessDeviceInfo(const NSTACKX_DeviceInfo *nstackxInfo, DeviceInfo *devInfo,
87- const DiscInnerCallback *discCb, SoftBusMutex *discCbLock)87+ const DiscInnerCallback discCb)
88{88{
89 DISC_CHECK_AND_RETURN_RET_LOGE(nstackxInfo != NULL, SOFTBUS_INVALID_PARAM, DISC_COAP, "nstackx devInfo is NULL");89 DISC_CHECK_AND_RETURN_RET_LOGE(nstackxInfo != NULL, SOFTBUS_INVALID_PARAM, DISC_COAP, "nstackx devInfo is NULL");
90 DISC_CHECK_AND_RETURN_RET_LOGE(devInfo != NULL, SOFTBUS_INVALID_PARAM, DISC_COAP, "devInfo is NULL");90 DISC_CHECK_AND_RETURN_RET_LOGE(devInfo != NULL, SOFTBUS_INVALID_PARAM, DISC_COAP, "devInfo is NULL");
@@ -108,15 +108,11 @@ int32_t DiscCoapProcessDeviceInfo(const NSTACKX_DeviceInfo *nstackxInfo, DeviceI
108 AnonymizeFree(anonymizedName);108 AnonymizeFree(anonymizedName);
109 AnonymizeFree(anonymizedId);109 AnonymizeFree(anonymizedId);
110 AnonymizeFree(anonymizedIp);110 AnonymizeFree(anonymizedIp);
111- DISC_CHECK_AND_RETURN_RET_LOGE(SoftBusMutexLock(discCbLock) == SOFTBUS_OK, SOFTBUS_LOCK_ERR,111+ if (discCb.OnDeviceFound == NULL) {
112- DISC_COAP, "lock failed");
113- if (discCb == NULL || discCb->OnDeviceFound == NULL) {
114 DISC_LOGW(DISC_COAP, "discCb is NULL");112 DISC_LOGW(DISC_COAP, "discCb is NULL");
115- (void)SoftBusMutexUnlock(discCbLock);
116 return SOFTBUS_INVALID_PARAM;113 return SOFTBUS_INVALID_PARAM;
117 }114 }
118- discCb->OnDeviceFound(devInfo, &additions);115+ discCb.OnDeviceFound(devInfo, &additions);
119- (void)SoftBusMutexUnlock(discCbLock);
120 return SOFTBUS_OK;116 return SOFTBUS_OK;
121 }117 }
122 118 
@@ -249,10 +249,18 @@ static void OnDeviceFound(const NSTACKX_DeviceInfo *deviceList, uint32_t deviceC
249{249{
250 DISC_CHECK_AND_RETURN_LOGE(deviceList != NULL && deviceCount != 0, DISC_COAP, "invalid param.");250 DISC_CHECK_AND_RETURN_LOGE(deviceList != NULL && deviceCount != 0, DISC_COAP, "invalid param.");
251 DISC_LOGD(DISC_COAP, "Disc device found, count=%{public}u", deviceCount);251 DISC_LOGD(DISC_COAP, "Disc device found, count=%{public}u", deviceCount);
252+ int32_t ret = SoftBusMutexLock(&g_discCoapInnerCbLock);
253+ DISC_CHECK_AND_RETURN_LOGE(ret == SOFTBUS_OK, DISC_COAP, "lock cb mutex err");
254+ if (g_discCoapInnerCb == NULL) {
255+ DISC_LOGE(DISC_COAP, "g_discCoapInnerCb is null");
256+ (void)SoftBusMutexUnlock(&g_discCoapInnerCbLock);
257+ return;
258+ }
259+ const DiscInnerCallback cb = *g_discCoapInnerCb;
260+ (void)SoftBusMutexUnlock(&g_discCoapInnerCbLock);
252 DeviceInfo *discDeviceInfo = (DeviceInfo *)SoftBusCalloc(sizeof(DeviceInfo));261 DeviceInfo *discDeviceInfo = (DeviceInfo *)SoftBusCalloc(sizeof(DeviceInfo));
253 DISC_CHECK_AND_RETURN_LOGE(discDeviceInfo != NULL, DISC_COAP, "malloc device info failed.");262 DISC_CHECK_AND_RETURN_LOGE(discDeviceInfo != NULL, DISC_COAP, "malloc device info failed.");
254 263 
255- int32_t ret;
256 for (uint32_t i = 0; i < deviceCount; i++) {264 for (uint32_t i = 0; i < deviceCount; i++) {
257 const NSTACKX_DeviceInfo *nstackxDeviceInfo = deviceList + i;265 const NSTACKX_DeviceInfo *nstackxDeviceInfo = deviceList + i;
258 if (nstackxDeviceInfo == NULL) {266 if (nstackxDeviceInfo == NULL) {
@@ -275,8 +283,7 @@ static void OnDeviceFound(const NSTACKX_DeviceInfo *deviceList, uint32_t deviceC
275 DISC_LOGW(DISC_COAP, "parse discovery device info failed.");283 DISC_LOGW(DISC_COAP, "parse discovery device info failed.");
276 continue;284 continue;
277 }285 }
278- ret = DiscCoapProcessDeviceInfoPacked(nstackxDeviceInfo, discDeviceInfo, g_discCoapInnerCb,286+ ret = DiscCoapProcessDeviceInfoPacked(nstackxDeviceInfo, discDeviceInfo, cb);
279- &g_discCoapInnerCbLock);
280 if (ret != SOFTBUS_OK) {287 if (ret != SOFTBUS_OK) {
281 DISC_LOGD(DISC_COAP, "DiscRecv: process device info failed, ret=%{public}d", ret);288 DISC_LOGD(DISC_COAP, "DiscRecv: process device info failed, ret=%{public}d", ret);
282 }289 }
@@ -46,7 +46,7 @@ typedef int32_t (*SchedulerDeinitBroadcastFunc)(void);
46 46 
47#if !defined(__G_ENHANCE_DISC_FUNC_PACK_INNER_DISC_COAP_VIRTUAL)47#if !defined(__G_ENHANCE_DISC_FUNC_PACK_INNER_DISC_COAP_VIRTUAL)
48typedef int32_t (*DiscCoapProcessDeviceInfoFunc)(const NSTACKX_DeviceInfo *nstackxInfo, DeviceInfo *devInfo,48typedef int32_t (*DiscCoapProcessDeviceInfoFunc)(const NSTACKX_DeviceInfo *nstackxInfo, DeviceInfo *devInfo,
49- const DiscInnerCallback *discCb, SoftBusMutex *discCbLock);49+ const DiscInnerCallback discCb);
50#ifdef DSOFTBUS_FEATURE_DISC_SHARE_COAP50#ifdef DSOFTBUS_FEATURE_DISC_SHARE_COAP
51typedef int32_t (*DiscCoapAssembleCapDataFunc)(51typedef int32_t (*DiscCoapAssembleCapDataFunc)(
52 uint32_t capability, const char *capabilityData, uint32_t dataLen, char *outData, uint32_t outLen);52 uint32_t capability, const char *capabilityData, uint32_t dataLen, char *outData, uint32_t outLen);
@@ -48,7 +48,7 @@ int32_t SchedulerDeinitBroadcastPacked(void);
48int32_t DiscCoapAssembleBdataPacked(48int32_t DiscCoapAssembleBdataPacked(
49 const unsigned char *capabilityData, uint32_t dataLen, char *businessData, uint32_t businessDataLen);49 const unsigned char *capabilityData, uint32_t dataLen, char *businessData, uint32_t businessDataLen);
50int32_t DiscCoapProcessDeviceInfoPacked(const NSTACKX_DeviceInfo *nstackxInfo, DeviceInfo *devInfo,50int32_t DiscCoapProcessDeviceInfoPacked(const NSTACKX_DeviceInfo *nstackxInfo, DeviceInfo *devInfo,
51- const DiscInnerCallback *discCb, SoftBusMutex *discCbLock);51+ const DiscInnerCallback discCb);
52#ifdef DSOFTBUS_FEATURE_DISC_SHARE_COAP52#ifdef DSOFTBUS_FEATURE_DISC_SHARE_COAP
53int32_t DiscCoapAssembleCapDataPacked(uint32_t capability, const char *capabilityData, uint32_t dataLen, char *outData,53int32_t DiscCoapAssembleCapDataPacked(uint32_t capability, const char *capabilityData, uint32_t dataLen, char *outData,
54 uint32_t outLen);54 uint32_t outLen);
@@ -92,13 +92,13 @@ int32_t SchedulerDeinitBroadcastPacked(void)
92 92 
93#if !defined(__G_ENHANCE_DISC_FUNC_PACK_INNER_DISC_COAP_VIRTUAL)93#if !defined(__G_ENHANCE_DISC_FUNC_PACK_INNER_DISC_COAP_VIRTUAL)
94int32_t DiscCoapProcessDeviceInfoPacked(const NSTACKX_DeviceInfo *nstackxInfo, DeviceInfo *devInfo,94int32_t DiscCoapProcessDeviceInfoPacked(const NSTACKX_DeviceInfo *nstackxInfo, DeviceInfo *devInfo,
95- const DiscInnerCallback *discCb, SoftBusMutex *discCbLock)95+ const DiscInnerCallback discCb)
96{96{
97 DiscEnhanceFuncList *pfnDiscEnhanceFuncList = DiscEnhanceFuncListGet();97 DiscEnhanceFuncList *pfnDiscEnhanceFuncList = DiscEnhanceFuncListGet();
98 if (DiscCheckFuncPointer((void *)pfnDiscEnhanceFuncList->discCoapProcessDeviceInfo) != SOFTBUS_OK) {98 if (DiscCheckFuncPointer((void *)pfnDiscEnhanceFuncList->discCoapProcessDeviceInfo) != SOFTBUS_OK) {
99- return DiscCoapProcessDeviceInfo(nstackxInfo, devInfo, discCb, discCbLock);99+ return DiscCoapProcessDeviceInfo(nstackxInfo, devInfo, discCb);
100 }100 }
101- return pfnDiscEnhanceFuncList->discCoapProcessDeviceInfo(nstackxInfo, devInfo, discCb, discCbLock);101+ return pfnDiscEnhanceFuncList->discCoapProcessDeviceInfo(nstackxInfo, devInfo, discCb);
102}102}
103 103 
104int32_t DiscCoapAssembleBdataPacked(const unsigned char *capabilityData, uint32_t dataLen, char *businessData,104int32_t DiscCoapAssembleBdataPacked(const unsigned char *capabilityData, uint32_t dataLen, char *businessData,
@@ -30,7 +30,7 @@ extern "C" {
30 30 
31int32_t DiscFillBtype(uint32_t capability, uint32_t allCap, NSTACKX_DiscoverySettings *discSet);31int32_t DiscFillBtype(uint32_t capability, uint32_t allCap, NSTACKX_DiscoverySettings *discSet);
32int32_t DiscCoapProcessDeviceInfo(const NSTACKX_DeviceInfo *nstackxInfo, DeviceInfo *devInfo,32int32_t DiscCoapProcessDeviceInfo(const NSTACKX_DeviceInfo *nstackxInfo, DeviceInfo *devInfo,
33- const DiscInnerCallback *discCb, SoftBusMutex *discCbLock);33+ const DiscInnerCallback discCb);
34int32_t DiscCoapFillServiceData(const PublishOption *option, char *outData, uint32_t outDataLen, uint32_t allCap);34int32_t DiscCoapFillServiceData(const PublishOption *option, char *outData, uint32_t outDataLen, uint32_t allCap);
35int32_t DiscCoapAssembleCapData(uint32_t capability, const char *capabilityData, uint32_t dataLen, char *outData,35int32_t DiscCoapAssembleCapData(uint32_t capability, const char *capabilityData, uint32_t dataLen, char *outData,
36 uint32_t outLen);36 uint32_t outLen);
@@ -765,12 +765,11 @@ int32_t DeInitBroadcastMgrStub(void)
765}765}
766 766
767int32_t DiscCoapProcessDeviceInfoStub(const NSTACKX_DeviceInfo *nstackxInfo, DeviceInfo *devInfo,767int32_t DiscCoapProcessDeviceInfoStub(const NSTACKX_DeviceInfo *nstackxInfo, DeviceInfo *devInfo,
768- const DiscInnerCallback *discCb, SoftBusMutex *discCbLock)768+ const DiscInnerCallback discCb)
769{769{
770 (void)nstackxInfo;770 (void)nstackxInfo;
771 (void)devInfo;771 (void)devInfo;
772 (void)discCb;772 (void)discCb;
773- (void)discCbLock;
774 return SOFTBUS_OK;773 return SOFTBUS_OK;
775}774}
776 775
@@ -834,10 +833,11 @@ HWTEST_F(SoftbusGEnhanceTest, SoftbusGEnhanceTest026, TestSize.Level1)
834 EXPECT_EQ(ret, SOFTBUS_OK);833 EXPECT_EQ(ret, SOFTBUS_OK);
835 834
836 pfnDiscEnhanceFuncList->discCoapProcessDeviceInfo = nullptr;835 pfnDiscEnhanceFuncList->discCoapProcessDeviceInfo = nullptr;
837- ret = DiscCoapProcessDeviceInfoPacked(nullptr, nullptr, nullptr, nullptr);836+ DiscInnerCallback discCb = {0};
837+ ret = DiscCoapProcessDeviceInfoPacked(nullptr, nullptr, discCb);
838 EXPECT_EQ(ret, SOFTBUS_INVALID_PARAM);838 EXPECT_EQ(ret, SOFTBUS_INVALID_PARAM);
839 pfnDiscEnhanceFuncList->discCoapProcessDeviceInfo = DiscCoapProcessDeviceInfoStub;839 pfnDiscEnhanceFuncList->discCoapProcessDeviceInfo = DiscCoapProcessDeviceInfoStub;
840- ret = DiscCoapProcessDeviceInfoPacked(nullptr, nullptr, nullptr, nullptr);840+ ret = DiscCoapProcessDeviceInfoPacked(nullptr, nullptr, discCb);
841 EXPECT_EQ(ret, SOFTBUS_OK);841 EXPECT_EQ(ret, SOFTBUS_OK);
842#if !defined(__G_ENHANCE_DISC_FUNC_PACK_INNER_DISC_COAP_VIRTUAL)842#if !defined(__G_ENHANCE_DISC_FUNC_PACK_INNER_DISC_COAP_VIRTUAL)
843 pfnDiscEnhanceFuncList->discCoapAssembleBdata = nullptr;843 pfnDiscEnhanceFuncList->discCoapAssembleBdata = nullptr;