未验证 提交 58a75ba4 编写于 作者: O openharmony_ci 提交者: Gitee

!250 ipc:modify interface of ResetIpc

Merge pull request !250 from liubb_0516/master
......@@ -175,6 +175,7 @@ if (ohos_kernel_type == "liteos_m") {
"//third_party/bounds_checking_function/:libsec_shared",
]
configs -= [ "//build/lite/config:clang_opt" ]
defines = [ "IPC_RESET_SKELETON" ]
}
SYSTEM_LEVEL = "small"
......@@ -217,6 +218,7 @@ if (ohos_kernel_type == "liteos_m") {
]
deps = [ "//foundation/communication/dsoftbus/sdk:softbus_client" ]
defines = [ "RPC_SOFTBUS_TRANS" ]
defines += [ "IPC_RESET_SKELETON" ]
if (enable_socket_trans) {
sources -= [ "$IPC_CORE_ROOT/rpc/trans_adapter/src/rpc_softbus_trans.c" ]
......
......@@ -339,6 +339,7 @@ static void GetDeathCallback(IpcMsg* msg, HdlerArg* arg)
return;
}
arg->msg = msg;
arg->num = MAX_DEATH_CALLBACK_NUM;
(void)pthread_mutex_unlock(&g_ipcCallback.mutex);
}
......
......@@ -70,7 +70,6 @@ void SendObituary(DeathCallback *deathCallback);
void DeleteDeathCallback(DeathCallback *deathCallback);
void WaitForProxyInit(SvcIdentity *svc);
int32_t DeleteHandle(int32_t handle);
void ResetIpc(void);
#ifdef __cplusplus
}
#endif /* __cplusplus */
......
/*
* Copyright (c) 2022 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef OHOS_IPC_RPC_SKELETON_PRI_H
#define OHOS_IPC_RPC_SKELETON_PRI_H
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
void ResetIpc(void);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif // OHOS_IPC_RPC_SKELETON_PRI_H
......@@ -15,6 +15,7 @@
#include "ipc_process_skeleton.h"
#include "ipc_skeleton.h"
#include "ipc_skeleton_pri.h"
#include "ipc_thread_pool.h"
#include "iremote_invoker.h"
#include "rpc_errno.h"
......@@ -422,10 +423,31 @@ void DeleteDeathCallback(DeathCallback *deathCallback)
free(deathCallback);
}
static void DeleteAllNode(void)
{
(void)pthread_mutex_lock(&g_ipcSkeleton->lock);
DeathCallback *node = NULL;
DeathCallback *next = NULL;
UTILS_DL_LIST_FOR_EACH_ENTRY_SAFE(node, next, &g_ipcSkeleton->objects, DeathCallback, list)
{
pthread_mutex_destroy(&node->lock);
UtilsListDelete(&node->list);
free(node);
}
pthread_mutex_unlock(&g_ipcSkeleton->lock);
}
void ResetIpc(void)
{
RPC_LOG_INFO("ResetIpc called");
RemoteInvoker *invoker = GetRemoteInvoker();
if (invoker != NULL && invoker->InvokerResetIpc != NULL) {
(invoker->InvokerResetIpc)();
}
DeleteAllNode();
#ifdef IPC_RESET_SKELETON
DeleteIpcSkeleton(g_ipcSkeleton);
g_ipcSkeleton = NULL;
g_ipcSkeleton = IpcProcessSkeleton();
#endif
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册