已合并
fix coap mutex #11198
wangJE创建于 2025年10月31日
fix coap mutex #11198
已合并
共 7 个文件变更+23-20
| @@ -84,7 +84,7 @@ int32_t DiscFillBtype(uint32_t capability, uint32_t allCap, NSTACKX_DiscoverySet | |||
| 84 | } | 84 | } |
| 85 | 85 | ||
| 86 | int32_t DiscCoapProcessDeviceInfo(const NSTACKX_DeviceInfo *nstackxInfo, DeviceInfo *devInfo, | 86 | int32_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) |
| 48 | typedef int32_t (*DiscCoapProcessDeviceInfoFunc)(const NSTACKX_DeviceInfo *nstackxInfo, DeviceInfo *devInfo, | 48 | typedef 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_COAP | 50 | #ifdef DSOFTBUS_FEATURE_DISC_SHARE_COAP |
| 51 | typedef int32_t (*DiscCoapAssembleCapDataFunc)( | 51 | typedef 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); | |||
| 48 | int32_t DiscCoapAssembleBdataPacked( | 48 | int32_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); |
| 50 | int32_t DiscCoapProcessDeviceInfoPacked(const NSTACKX_DeviceInfo *nstackxInfo, DeviceInfo *devInfo, | 50 | int32_t DiscCoapProcessDeviceInfoPacked(const NSTACKX_DeviceInfo *nstackxInfo, DeviceInfo *devInfo, |
| 51 | - const DiscInnerCallback *discCb, SoftBusMutex *discCbLock); | 51 | + const DiscInnerCallback discCb); |
| 52 | #ifdef DSOFTBUS_FEATURE_DISC_SHARE_COAP | 52 | #ifdef DSOFTBUS_FEATURE_DISC_SHARE_COAP |
| 53 | int32_t DiscCoapAssembleCapDataPacked(uint32_t capability, const char *capabilityData, uint32_t dataLen, char *outData, | 53 | int32_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) |
| 94 | int32_t DiscCoapProcessDeviceInfoPacked(const NSTACKX_DeviceInfo *nstackxInfo, DeviceInfo *devInfo, | 94 | int32_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 | ||
| 104 | int32_t DiscCoapAssembleBdataPacked(const unsigned char *capabilityData, uint32_t dataLen, char *businessData, | 104 | int32_t DiscCoapAssembleBdataPacked(const unsigned char *capabilityData, uint32_t dataLen, char *businessData, |
| @@ -30,7 +30,7 @@ extern "C" { | |||
| 30 | 30 | ||
| 31 | int32_t DiscFillBtype(uint32_t capability, uint32_t allCap, NSTACKX_DiscoverySettings *discSet); | 31 | int32_t DiscFillBtype(uint32_t capability, uint32_t allCap, NSTACKX_DiscoverySettings *discSet); |
| 32 | int32_t DiscCoapProcessDeviceInfo(const NSTACKX_DeviceInfo *nstackxInfo, DeviceInfo *devInfo, | 32 | int32_t DiscCoapProcessDeviceInfo(const NSTACKX_DeviceInfo *nstackxInfo, DeviceInfo *devInfo, |
| 33 | - const DiscInnerCallback *discCb, SoftBusMutex *discCbLock); | 33 | + const DiscInnerCallback discCb); |
| 34 | int32_t DiscCoapFillServiceData(const PublishOption *option, char *outData, uint32_t outDataLen, uint32_t allCap); | 34 | int32_t DiscCoapFillServiceData(const PublishOption *option, char *outData, uint32_t outDataLen, uint32_t allCap); |
| 35 | int32_t DiscCoapAssembleCapData(uint32_t capability, const char *capabilityData, uint32_t dataLen, char *outData, | 35 | int32_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 | ||
| 767 | int32_t DiscCoapProcessDeviceInfoStub(const NSTACKX_DeviceInfo *nstackxInfo, DeviceInfo *devInfo, | 767 | int32_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; |