From 8ff62492e0c2aefd714ef7941e4cf95bfda05279 Mon Sep 17 00:00:00 2001 From: fancy <258828110.@qq.com> Date: Thu, 2 Nov 2023 09:19:32 -0700 Subject: [PATCH] Improve shared data module. --- test/utils/SharedData/src/SharedDataTest.cpp | 10 +++++----- utils/SharedData/include/SharedData.h | 4 ++-- utils/SharedData/src/SharedDataImpl.cpp | 11 +++++++++++ utils/SharedData/src/SharedMemory.cpp | 15 +++++++++++++-- 4 files changed, 31 insertions(+), 9 deletions(-) diff --git a/test/utils/SharedData/src/SharedDataTest.cpp b/test/utils/SharedData/src/SharedDataTest.cpp index f0a8c572..b0324bbe 100644 --- a/test/utils/SharedData/src/SharedDataTest.cpp +++ b/test/utils/SharedData/src/SharedDataTest.cpp @@ -56,16 +56,16 @@ namespace SharedDataTest SharedData *sharedDataMinor = CreateSharedData(SHARER_NAME_MINOR, "./shared_file", PROJECT_ID); if (nullptr != sharedDataMinor) { - int writableData = 9; - IMakeSharedData(sharedDataMinor, sizeof(int), sizeof(int)); + int writableData = 122; + IMakeSharedData(sharedDataMinor, sizeof(int) * 200, sizeof(int)); ISetWritableData(sharedDataMinor, &writableData, sizeof(int)); } if (nullptr != sharedDataPrimary) { - int readableData = -1; - IMakeSharedData(sharedDataPrimary, sizeof(int), sizeof(int)); + int readableData[200] = {0}; + IMakeSharedData(sharedDataPrimary, sizeof(int) * 200, sizeof(int)); IGetReadableData(sharedDataPrimary, &readableData, sizeof(int)); - LogInfo("readableData = %d\n", readableData); + LogInfo("readableData = %d\n", readableData[0]); IFree(sharedDataPrimary); } if (nullptr != sharedDataMinor) diff --git a/utils/SharedData/include/SharedData.h b/utils/SharedData/include/SharedData.h index 41217d8f..fc5fcbfe 100644 --- a/utils/SharedData/include/SharedData.h +++ b/utils/SharedData/include/SharedData.h @@ -53,9 +53,9 @@ extern "C" { object->mSetWritableData(object, buf, bufLength); } - static inline void IFree(void *ptr) + static inline void IFree(SharedData *object) { - ((SharedData *)ptr)->mFree(ptr); + object->mFree(object); } #ifdef __cplusplus } diff --git a/utils/SharedData/src/SharedDataImpl.cpp b/utils/SharedData/src/SharedDataImpl.cpp index 744813e2..d412c325 100644 --- a/utils/SharedData/src/SharedDataImpl.cpp +++ b/utils/SharedData/src/SharedDataImpl.cpp @@ -71,6 +71,11 @@ void SharedDataCpp::WritableDataInit(void) } void SharedDataCpp::GetReadableMemory(void *buf, const unsigned int &bufLength) { + if (nullptr == mSharedMemeory) + { + LogError("mSharedMemeory is nullptr, failed.\n"); + return; + } if (SHARER_NAME_PRIMARY == mSharerName && bufLength == mPrimaryReadSize) { if (memcmp((char *)mSharedMemeory, USER_NAME_INIT_NAME, USER_NAME_BUF_LENGTH) == 0) @@ -104,6 +109,11 @@ void SharedDataCpp::GetReadableMemory(void *buf, const unsigned int &bufLength) } void SharedDataCpp::SetWritableMemory(void *buf, const unsigned int &bufLength) { + if (nullptr == mSharedMemeory) + { + LogError("mSharedMemeory is nullptr, failed.\n"); + return; + } if (SHARER_NAME_PRIMARY == mSharerName && bufLength == mMinorReadSize) { memcpy((char *)mSharedMemeory + sizeof(UserDataHeader) * THERE_TWO_USER_DATA_HEADER + mPrimaryReadSize, @@ -140,6 +150,7 @@ static void SharedDataImplFree(void *ptr) SharedDataImpl *object = ((SharedDataImpl *)(((char *)ptr) - sizeof(SharedDataHeader))); if (SHARED_DATA_NAME == object->mHeader.mCheckName) { + object->mSharedData->CleanSharedMemory(); object->mSharedData = nullptr; free(((char *)ptr) - sizeof(SharedDataHeader)); } diff --git a/utils/SharedData/src/SharedMemory.cpp b/utils/SharedData/src/SharedMemory.cpp index 8b236308..12579c36 100644 --- a/utils/SharedData/src/SharedMemory.cpp +++ b/utils/SharedData/src/SharedMemory.cpp @@ -44,14 +44,20 @@ StatusCode SharedMemory::MakeSharedMemory(const int &size) mId = shmget(key, size, IPC_CREAT | 0666); if (mId == SHMGET_FAILED) { - LogError("shmget failed.\n"); + printf("errno = %d, errmsg = %s\n", errno, strerror(errno)); + LogError("shmget failed. memory size = %d\n", size); return CreateStatusCode(STATUS_CODE_NOT_OK); } - LogInfo("Make shared memory succeed.\n"); + LogInfo("Make shared memory succeed. memory size = %d\n", size); return CreateStatusCode(STATUS_CODE_OK); } StatusCode SharedMemory::CleanSharedMemory(void) { + if (SHMGET_FAILED == mId) + { + LogError("mId error.\n"); + return CreateStatusCode(STATUS_CODE_NOT_OK); + } if (shmctl(mId, IPC_RMID, NULL) < 0) { LogError("shmctl failed.\n"); @@ -61,5 +67,10 @@ StatusCode SharedMemory::CleanSharedMemory(void) } void *SharedMemory::GetMemory(void) { + if (SHMGET_FAILED == mId) + { + LogError("mId error.\n"); + return nullptr; + } return shmat(mId, NULL, 0); } \ No newline at end of file