Skip to content

Commit

Permalink
align adminstration
Browse files Browse the repository at this point in the history
  • Loading branch information
nxtum committed Oct 8, 2024
1 parent 064b4ce commit 74198e9
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 15 deletions.
8 changes: 4 additions & 4 deletions Source/core/SharedBuffer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,14 @@ namespace Core {
, _producer(reinterpret_cast<uint8_t*>(_administration) + sizeof(Administration))
, _consumer(reinterpret_cast<uint8_t*>(_administration) + sizeof(Administration) + SharedSemaphore::Size())
#endif
, _customerAdministration(PointerAlign(&(reinterpret_cast<uint8_t*>(_administration)[sizeof(Administration)])))
, _customerAdministration(PointerAlign(&(reinterpret_cast<uint8_t*>(_administration)[sizeof(Administration) + (SharedSemaphore::Size() * 2)])))
{
Align<uint64_t>();
}
SharedBuffer::SharedBuffer(const TCHAR name[], const uint32_t mode, const uint32_t bufferSize, const uint16_t administratorSize)
: DataElementFile(name, mode | File::SHAREABLE | File::CREATE, bufferSize)
, _administrationBuffer((string(name) + ".admin"), mode | File::SHAREABLE | File::CREATE, sizeof(Administration) + (SharedSemaphore::Size() * 2) + administratorSize +
((sizeof(Administration) + (SharedSemaphore::Size() * 2) + administratorSize) % sizeof(void*) == 0 ?
, _administrationBuffer((string(name) + ".admin"), mode | File::SHAREABLE | File::CREATE, sizeof(Administration) + (SharedSemaphore::Size() * 2) + administratorSize
+ (sizeof(void*) * 2) + ((sizeof(Administration) + (SharedSemaphore::Size() * 2) + administratorSize) % sizeof(void*) == 0 ?
0 : (sizeof(void*) - ((sizeof(Administration) + (SharedSemaphore::Size() * 2) + administratorSize) % sizeof(void*)))) /* Align buffer on 32/64 bits boundary */)
, _administration(reinterpret_cast<Administration*>(PointerAlign(_administrationBuffer.Buffer())))
#ifdef __WINDOWS__
Expand All @@ -54,7 +54,7 @@ namespace Core {
, _producer(reinterpret_cast<uint8_t*>(_administration) + sizeof(Administration), 1, 1)
, _consumer(reinterpret_cast<uint8_t*>(_administration) + sizeof(Administration) + SharedSemaphore::Size(), 0, 1)
# endif
, _customerAdministration(PointerAlign(&(reinterpret_cast<uint8_t*>(_administration)[sizeof(Administration)])))
, _customerAdministration(PointerAlign(&(reinterpret_cast<uint8_t*>(_administration)[sizeof(Administration) + (SharedSemaphore::Size() * 2)])))
{
_administration->_bytesWritten = 0;
Align<uint64_t>();
Expand Down
11 changes: 4 additions & 7 deletions Source/core/Sync.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -799,13 +799,12 @@ namespace Core {
{
ASSERT(initCount <= 1);
ASSERT(maxCount == 1);

#ifdef __WINDOWS__
_semaphore = (::CreateSemaphore(nullptr, initCount, maxCount, sourceName));
ASSERT(_semaphore != nullptr);
#else
_name = "/" + string(sourceName);
_semaphore = sem_open(_name.c_str(), O_CREAT | O_RDWR, 0644, initCount);
_semaphore = sem_open(_name.c_str(), O_CREAT | O_RDWR | O_EXCL, 0644, initCount);
ASSERT(_semaphore != SEM_FAILED);
#endif
}
Expand All @@ -828,11 +827,9 @@ namespace Core {
ASSERT(storage != nullptr);
ASSERT(initCount <= 1);
ASSERT(maxCount == 1);

if (initCount != 0 && maxCount != 0) {
VARIABLE_IS_NOT_USED int result = sem_init(static_cast<sem_t*>(_semaphore), 1, initCount);
ASSERT(result != -1);
}
memset(_semaphore, 0, sizeof(sem_t));
VARIABLE_IS_NOT_USED int result = sem_init(static_cast<sem_t*>(_semaphore), 1, initCount);
ASSERT(result != -1);
}

SharedSemaphore::SharedSemaphore(void* storage)
Expand Down
4 changes: 0 additions & 4 deletions Source/core/Sync.h
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,6 @@ namespace Core {

SharedSemaphore(const TCHAR name[], const uint32_t initValue, const uint32_t maxValue);
SharedSemaphore(const TCHAR name[]);

#ifndef __WINDOWS__
/*
If pshared is nonzero, then the semaphore is shared between
Expand All @@ -204,18 +203,15 @@ namespace Core {
*/
SharedSemaphore(void *storage, const uint32_t initValue, const uint32_t maxValue);
SharedSemaphore(void *storage);

public:
#endif
~SharedSemaphore();
public:
uint32_t Lock(const uint32_t waitTime);
uint32_t Unlock();
bool IsLocked();

static size_t Size();
uint32_t MaxCount() const;

private:
#ifdef __WINDOWS__
HANDLE _semaphore;
Expand Down

0 comments on commit 74198e9

Please sign in to comment.