diff --git a/dbinder/dbinder_service/src/dbinder_service.cpp b/dbinder/dbinder_service/src/dbinder_service.cpp index cff3b1afb12987c2720bc98739ab971ef2ee1656..cd3ed2b0a6e86efda244ffc1e035b0aa14bb07e4 100644 --- a/dbinder/dbinder_service/src/dbinder_service.cpp +++ b/dbinder/dbinder_service/src/dbinder_service.cpp @@ -1167,7 +1167,7 @@ void DBinderService::MakeSessionByReplyMessage(std::shared_ptrseqNumber < session->seqNumber) { + if (oldSession->seqNumber <= session->seqNumber) { // remote old session if (!DetachSessionObject(QueryStubPtr(replyMessage->stub))) { DBINDER_LOGE(LOG_LABEL, "failed to detach session object"); diff --git a/ipc/native/src/core/dbinder/source/dbinder_databus_invoker.cpp b/ipc/native/src/core/dbinder/source/dbinder_databus_invoker.cpp index 91438fe6752b79de3384e1b7d2898ac2f0669a74..9911cf7498b131e5f14eb7ff4fd2dfa172377e51 100644 --- a/ipc/native/src/core/dbinder/source/dbinder_databus_invoker.cpp +++ b/ipc/native/src/core/dbinder/source/dbinder_databus_invoker.cpp @@ -621,6 +621,7 @@ void DBinderDatabusInvoker::OnDatabusSessionClientSideClosed(int32_t socketId) sptr remoteObject = current->QueryObject(descriptor); if (remoteObject != nullptr) { IPCObjectProxy *remoteProxy = reinterpret_cast(remoteObject.GetRefPtr()); + remoteProxy->ClearDBinderServiceState(); // No need to close session again here. First erase session and then notify user session has been closed. current->ProxyDetachDBinderSession(*it, remoteProxy); if (remoteProxy->IsSubscribeDeathNotice()) { @@ -631,7 +632,6 @@ void DBinderDatabusInvoker::OnDatabusSessionClientSideClosed(int32_t socketId) remoteProxy->SetObjectDied(true); ZLOGW(LOG_LABEL, "desc:%{public}s does not subscribe death notice", descStr8.c_str()); } - remoteProxy->ClearDBinderServiceState(); } else { ZLOGE(LOG_LABEL, "cannot find proxy with desc:%{public}s", descStr8.c_str()); }