diff options
author | Zoran Aleksov <zoran.aleksov@seavus.com> | 2012-05-04 16:05:48 +0200 |
---|---|---|
committer | Viktor Mladenovski <viktor.mladenovski@seavus.com> | 2012-05-25 14:45:43 +0200 |
commit | 24629b4d05f7b0826c8cd1866d57ddcc4cb949d1 (patch) | |
tree | 5d9dd6c4dafd956413b5d289a2301f60e2dd3fcc /source/api_wrappers/linux/CEventObject.cpp | |
parent | 78bf8bace61dbae9d7d314716dfd356ff639a416 (diff) |
sem_open issue
Previous solution is reverted back
using compile switches) only for Ubuntu.
For Mac OS the problem still exists and
will be fixed in different patch.
ST-Ericsson ID: 432287
ST-Ericsson FOSS-OUT ID: NA
Change-Id: Idd50886392ceb58fb07d0c14ed5c9b88fcc7fd35
Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/58222
Reviewed-by: Vlatko PISTOLOV <vlatko.pistolov@seavus.com>
Tested-by: Vlatko PISTOLOV <vlatko.pistolov@seavus.com>
Diffstat (limited to 'source/api_wrappers/linux/CEventObject.cpp')
-rw-r--r-- | source/api_wrappers/linux/CEventObject.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/source/api_wrappers/linux/CEventObject.cpp b/source/api_wrappers/linux/CEventObject.cpp index 1a09fa9..eecbe6d 100644 --- a/source/api_wrappers/linux/CEventObject.cpp +++ b/source/api_wrappers/linux/CEventObject.cpp @@ -18,6 +18,7 @@ // ****************************************************************************** CEventObject::CEventObject() { +#if defined(__APPLE__) char sem_name[SEM_NAME_MAX_LENGTH]; int sem_nr = 1; @@ -33,6 +34,9 @@ CEventObject::CEventObject() sem_nr++; } +#elif defined(__linux__) + sem_init(&m_sem, 0, 0); +#endif } // ****************************************************************************** @@ -42,7 +46,11 @@ CEventObject::CEventObject() // ****************************************************************************** CEventObject::~CEventObject() { +#if defined(__APPLE__) sem_close(m_sem); +#elif defined(__linux__) + sem_destroy(&m_sem); +#endif } // ****************************************************************************** @@ -52,7 +60,11 @@ CEventObject::~CEventObject() // ****************************************************************************** void CEventObject::SetEvent() { +#if defined(__APPLE__) sem_post(m_sem); +#elif defined(__linux__) + sem_post(&m_sem); +#endif } // ****************************************************************************** @@ -62,6 +74,7 @@ void CEventObject::SetEvent() // ****************************************************************************** DWORD CEventObject::Wait(DWORD dwTimeout) { +#if defined(__APPLE__) if (INFINITE == dwTimeout) { sem_wait(m_sem); } else { @@ -97,4 +110,23 @@ DWORD CEventObject::Wait(DWORD dwTimeout) } return WAIT_OBJECT_0; + +#elif defined(__linux__) + if (INFINITE == dwTimeout) { + sem_wait(&m_sem); + return WAIT_OBJECT_0; + } else { + timespec absolute_time = OS::GetAbsoluteTime(dwTimeout); + int ret; + + /* coverity[returned_null] */ + while (-1 == (ret = sem_timedwait(&m_sem, &absolute_time)) && errno == EINTR); + + if (0 == ret) { + return WAIT_OBJECT_0; + } else { + return WAIT_TIMEOUT; + } + } +#endif } |