projects
/
framework
/
web
/
wrt-commons.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
tizen 2.4 release
[framework/web/wrt-commons.git]
/
modules
/
core
/
src
/
thread.cpp
diff --git
a/modules_mobile/core/src/thread.cpp
b/modules/core/src/thread.cpp
old mode 100644
(file)
new mode 100755
(executable)
similarity index 83%
rename from
modules_mobile/core/src/thread.cpp
rename to
modules/core/src/thread.cpp
index
0e75810
..
5709545
--- a/
modules_mobile/core/src/thread.cpp
+++ b/
modules/core/src/thread.cpp
@@
-21,7
+21,7
@@
*/
#include <stddef.h>
#include <dpl/thread.h>
*/
#include <stddef.h>
#include <dpl/thread.h>
-#include <dpl/log/log.h>
+#include <dpl/log/
wrt_
log.h>
#include <sys/time.h>
#include <algorithm>
#include <dpl/assert.h>
#include <sys/time.h>
#include <algorithm>
#include <dpl/assert.h>
@@
-40,7
+40,7
@@
static const size_t NANOSECONDS_PER_MILISECOND =
static const size_t NANOSECONDS_PER_MICROSECOND =
static_cast<uint64_t>(1000);
static const size_t NANOSECONDS_PER_MICROSECOND =
static_cast<uint64_t>(1000);
-static const
pthread_t g_mainThread = pthread_self
();
+static const
std::thread::id g_mainThread = std::this_thread::get_id
();
class ThreadSpecific
{
class ThreadSpecific
{
@@
-67,7
+67,7
@@
namespace DPL {
bool g_TLSforMainCreated = false;
Thread::Thread() :
bool g_TLSforMainCreated = false;
Thread::Thread() :
- m_thread(
0
),
+ m_thread(),
m_abandon(false),
m_running(false),
m_directInvoke(false)
m_abandon(false),
m_running(false),
m_directInvoke(false)
@@
-95,12
+95,12
@@
Thread::~Thread()
bool Thread::IsMainThread()
{
bool Thread::IsMainThread()
{
- return (
pthread_equal(pthread_self(), g_mainThread)
);
+ return (
std::this_thread::get_id() == g_mainThread
);
}
Thread *Thread::GetCurrentThread()
{
}
Thread *Thread::GetCurrentThread()
{
- if (
pthread_equal(pthread_self(), g_mainThread)
) {
+ if (
std::this_thread::get_id() == g_mainThread
) {
return NULL;
}
return NULL;
}
@@
-116,7
+116,9
@@
Thread *Thread::GetCurrentThread()
void *Thread::StaticThreadEntry(void *param)
{
void *Thread::StaticThreadEntry(void *param)
{
- LogPedantic("Entered static thread entry");
+ char *errstr = NULL;
+ char errbuf[512] = {0,};
+ WrtLogD("Entered static thread entry");
// Retrieve context
Thread *This = static_cast<Thread *>(param);
// Retrieve context
Thread *This = static_cast<Thread *>(param);
@@
-126,7
+128,13
@@
void *Thread::StaticThreadEntry(void *param)
int result = pthread_setspecific(g_threadSpecific.threadSpecific, This);
if (result != 0) {
int result = pthread_setspecific(g_threadSpecific.threadSpecific, This);
if (result != 0) {
- LogError("Failed to set threadSpecific. Error: " << strerror(result));
+#ifdef _GNU_SOURCE
+ errstr = strerror_r(result, errbuf, sizeof(errbuf));
+#else
+ strerror_r(result, errbuf, sizeof(errbuf));
+ errstr = errbuf;
+#endif
+ WrtLogE("Failed to set threadSpecific. Error: %s", errstr);
}
// Enter thread proc
}
// Enter thread proc
@@
-140,16
+148,16
@@
void *Thread::StaticThreadEntry(void *param)
// Critical section
{
// Leave running state
// Critical section
{
// Leave running state
-
Mutex::ScopedLock lock(&
This->m_stateMutex);
+
std::lock_guard<std::mutex> lock(
This->m_stateMutex);
This->m_running = false;
// Abandon thread
if (This->m_abandon) {
This->m_running = false;
// Abandon thread
if (This->m_abandon) {
-
LogPedantic
("Thread was abandoned");
-
pthread_detach(This->m_thread
);
+
WrtLogD
("Thread was abandoned");
+
This->m_thread.detach(
);
} else {
} else {
-
LogPedantic
("Thread is joinable");
+
WrtLogD
("Thread is joinable");
}
}
}
}
@@
-158,26
+166,26
@@
void *Thread::StaticThreadEntry(void *param)
int Thread::ThreadEntry()
{
int Thread::ThreadEntry()
{
-
LogPedantic
("Entered default thread entry");
+
WrtLogD
("Entered default thread entry");
return Exec();
}
void Thread::ProcessEvents()
{
return Exec();
}
void Thread::ProcessEvents()
{
-
LogPedantic
("Processing events");
+
WrtLogD
("Processing events");
// Steal current event list
InternalEventList stolenEvents;
// Enter event list critical section
{
// Steal current event list
InternalEventList stolenEvents;
// Enter event list critical section
{
-
Mutex::ScopedLock lock(&
m_eventMutex);
+
std::lock_guard<std::mutex> lock(
m_eventMutex);
m_eventList.swap(stolenEvents);
m_eventInvoker.Reset();
}
// Process event list
m_eventList.swap(stolenEvents);
m_eventInvoker.Reset();
}
// Process event list
-
LogPedantic("Stolen " << stolenEvents.size() << " internal events"
);
+
WrtLogD("Stolen %u internal events", stolenEvents.size()
);
for (InternalEventList::iterator iterator = stolenEvents.begin();
iterator != stolenEvents.end();
for (InternalEventList::iterator iterator = stolenEvents.begin();
iterator != stolenEvents.end();
@@
-195,15
+203,13
@@
void Thread::ProcessTimedEvents()
{
// Critical section on timed events mutex
{
{
// Critical section on timed events mutex
{
-
Mutex::ScopedLock lock(&
m_timedEventMutex);
+
std::lock_guard<std::mutex> lock(
m_timedEventMutex);
// Get current time
unsigned long currentTimeMiliseconds = GetCurrentTimeMiliseconds();
// Info
// Get current time
unsigned long currentTimeMiliseconds = GetCurrentTimeMiliseconds();
// Info
- LogPedantic(
- "Processing timed events. Time now: " << currentTimeMiliseconds <<
- " ms");
+ WrtLogD("Processing timed events. Time now: %lu ms", currentTimeMiliseconds);
// All timed events are sorted chronologically
// Emit timed out events
// All timed events are sorted chronologically
// Emit timed out events
@@
-213,12
+219,9
@@
void Thread::ProcessTimedEvents()
m_timedEventVector.begin()->dueTimeMiliseconds)
{
// Info
m_timedEventVector.begin()->dueTimeMiliseconds)
{
// Info
- LogPedantic(
- "Transforming timed event into immediate event. Absolute due time: "
- <<
- (m_timedEventVector.begin()->registerTimeMiliseconds +
- m_timedEventVector.begin()->dueTimeMiliseconds) <<
- " ms");
+ WrtLogD("Transforming timed event into immediate event. Absolute due time: %lu ms",
+ (m_timedEventVector.begin()->registerTimeMiliseconds +
+ m_timedEventVector.begin()->dueTimeMiliseconds));
// Emit immediate event
PushEvent(m_timedEventVector.begin()->event,
// Emit immediate event
PushEvent(m_timedEventVector.begin()->event,
@@
-243,7
+246,7
@@
unsigned long Thread::GetCurrentTimeMiliseconds() const
int Thread::Exec()
{
int Thread::Exec()
{
-
LogPedantic
("Executing thread event processing");
+
WrtLogD
("Executing thread event processing");
const std::size_t MIN_HANDLE_LIST_SIZE = 4;
const std::size_t MIN_HANDLE_LIST_SIZE = 4;
@@
-287,7
+290,7
@@
int Thread::Exec()
// Critical section on timed events mutex
{
// Critical section on timed events mutex
{
-
Mutex::ScopedLock lock(&
m_timedEventMutex);
+
std::lock_guard<std::mutex> lock(
m_timedEventMutex);
if (!m_timedEventVector.empty()) {
unsigned long currentTimeMiliseconds =
if (!m_timedEventVector.empty()) {
unsigned long currentTimeMiliseconds =
@@
-309,8
+312,7
@@
int Thread::Exec()
}
// Info
}
// Info
- LogPedantic(
- "Thread loop minimum wait time: " << minimumWaitTime << " ms");
+ WrtLogD("Thread loop minimum wait time: %lu ms", minimumWaitTime);
// Do thread waiting
WaitableHandleIndexList waitableHandleIndexList =
// Do thread waiting
WaitableHandleIndexList waitableHandleIndexList =
@@
-318,7
+320,7
@@
int Thread::Exec()
if (waitableHandleIndexList.empty()) {
// Timeout occurred. Process timed events.
if (waitableHandleIndexList.empty()) {
// Timeout occurred. Process timed events.
-
LogPedantic
("Timed event list elapsed invoker");
+
WrtLogD
("Timed event list elapsed invoker");
ProcessTimedEvents();
continue;
}
ProcessTimedEvents();
continue;
}
@@
-331,7
+333,7
@@
int Thread::Exec()
{
size_t index = *waitableHandleIndexIterator;
{
size_t index = *waitableHandleIndexIterator;
-
LogPedantic("Event loop triggered with index: " <<
index);
+
WrtLogD("Event loop triggered with index: %u",
index);
switch (index) {
case 0:
switch (index) {
case 0:
@@
-347,7
+349,7
@@
int Thread::Exec()
if (m_directInvoke) {
m_directInvoke = false;
if (m_directInvoke) {
m_directInvoke = false;
-
LogPedantic
("Handling direct invoker");
+
WrtLogD
("Handling direct invoker");
// Update list
while (handleList.size() > MIN_HANDLE_LIST_SIZE) {
// Update list
while (handleList.size() > MIN_HANDLE_LIST_SIZE) {
@@
-370,7
+372,7
@@
int Thread::Exec()
case 2:
// Timed event list changed
case 2:
// Timed event list changed
-
LogPedantic
("Timed event list changed invoker");
+
WrtLogD
("Timed event list changed invoker");
ProcessTimedEvents();
// Reset timed event invoker
ProcessTimedEvents();
// Reset timed event invoker
@@
-381,7
+383,7
@@
int Thread::Exec()
case 3:
// Waitable handle watch support invoker
case 3:
// Waitable handle watch support invoker
-
LogPedantic
("Waitable handle watch invoker event occurred");
+
WrtLogD
("Waitable handle watch invoker event occurred");
// First, remove all previous handles
while (handleList.size() > MIN_HANDLE_LIST_SIZE) {
// First, remove all previous handles
while (handleList.size() > MIN_HANDLE_LIST_SIZE) {
@@
-401,14
+403,14
@@
int Thread::Exec()
// Handle invoker in waitable watch support
WaitableHandleWatchSupport::InvokerFinished();
// Handle invoker in waitable watch support
WaitableHandleWatchSupport::InvokerFinished();
-
LogPedantic
("Waitable handle watch invoker event handled");
+
WrtLogD
("Waitable handle watch invoker event handled");
// Done
break;
default:
// Waitable event watch list
// Done
break;
default:
// Waitable event watch list
-
LogPedantic
("Waitable handle watch event occurred");
+
WrtLogD
("Waitable handle watch event occurred");
// Handle event in waitable handle watch
{
// Handle event in waitable handle watch
{
@@
-421,7
+423,7
@@
int Thread::Exec()
if (m_directInvoke) {
m_directInvoke = false;
if (m_directInvoke) {
m_directInvoke = false;
-
LogPedantic
("Handling direct invoker");
+
WrtLogD
("Handling direct invoker");
// Update list
while (handleList.size() > MIN_HANDLE_LIST_SIZE) {
// Update list
while (handleList.size() > MIN_HANDLE_LIST_SIZE) {
@@
-439,7
+441,7
@@
int Thread::Exec()
}
}
}
}
-
LogPedantic
("Waitable handle watch event handled");
+
WrtLogD
("Waitable handle watch event handled");
// Done
break;
// Done
break;
@@
-447,24
+449,25
@@
int Thread::Exec()
}
}
}
}
-
LogPedantic
("Leaving thread event processing");
+
WrtLogD
("Leaving thread event processing");
return 0;
}
void Thread::Run()
{
return 0;
}
void Thread::Run()
{
-
LogPedantic
("Running thread");
+
WrtLogD
("Running thread");
// Critical section
{
// Critical section
{
-
Mutex::ScopedLock lock(&
m_stateMutex);
+
std::lock_guard<std::mutex> lock(
m_stateMutex);
if (m_running) {
return;
}
if (m_running) {
return;
}
- // Try to create new thread
- if (pthread_create(&m_thread, NULL, &StaticThreadEntry, this) != 0) {
+ try{
+ m_thread = std::thread(StaticThreadEntry,this);
+ }catch(std::system_error e){
Throw(Exception::RunFailed);
}
Throw(Exception::RunFailed);
}
@@
-475,43
+478,36
@@
void Thread::Run()
m_running = true;
}
m_running = true;
}
-
LogPedantic
("Thread run");
+
WrtLogD
("Thread run");
}
void Thread::Quit()
{
}
void Thread::Quit()
{
- pthread_t joinableThread;
-
// Critical section
{
// Critical section
{
-
Mutex::ScopedLock lock(&
m_stateMutex);
+
std::lock_guard<std::mutex> lock(
m_stateMutex);
// Is thread running ?
if (!m_running) {
return;
}
// Is thread running ?
if (!m_running) {
return;
}
-
LogPedantic
("Quitting thread...");
+
WrtLogD
("Quitting thread...");
// Do not abandon thread, we will join
m_abandon = false;
// Singal quit waitable event
m_quitEvent.Signal();
// Do not abandon thread, we will join
m_abandon = false;
// Singal quit waitable event
m_quitEvent.Signal();
-
- // Copy joinable thread identifier, because
- // we are leaving critical section
- joinableThread = m_thread;
}
}
- // Wait for joinable thread
- void *result;
-
- if (pthread_join(joinableThread, &result) != 0) {
+ try{
+ m_thread.join();
+ }catch(std::system_error e){
Throw(Exception::QuitFailed);
}
Throw(Exception::QuitFailed);
}
-
LogPedantic
("Thread quit");
+
WrtLogD
("Thread quit");
}
void Thread::PushEvent(void *event,
}
void Thread::PushEvent(void *event,
@@
-520,7
+516,7
@@
void Thread::PushEvent(void *event,
void *userParam)
{
// Enter event list critical section
void *userParam)
{
// Enter event list critical section
-
Mutex::ScopedLock lock(&
m_eventMutex);
+
std::lock_guard<std::mutex> lock(
m_eventMutex);
// Push new event
m_eventList.push_back(InternalEvent(event, userParam, eventDispatchProc,
// Push new event
m_eventList.push_back(InternalEvent(event, userParam, eventDispatchProc,
@@
-529,7
+525,7
@@
void Thread::PushEvent(void *event,
// Trigger invoker
m_eventInvoker.Signal();
// Trigger invoker
m_eventInvoker.Signal();
-
LogPedantic
("Event pushed and invoker signaled");
+
WrtLogD
("Event pushed and invoker signaled");
}
void Thread::PushTimedEvent(void *event,
}
void Thread::PushTimedEvent(void *event,
@@
-542,7
+538,7
@@
void Thread::PushTimedEvent(void *event,
Assert(dueTimeSeconds >= 0.0);
// Enter timed event list critical section
Assert(dueTimeSeconds >= 0.0);
// Enter timed event list critical section
-
Mutex::ScopedLock lock(&
m_timedEventMutex);
+
std::lock_guard<std::mutex> lock(
m_timedEventMutex);
// Get current time
unsigned long currentTimeMiliseconds = GetCurrentTimeMiliseconds();
// Get current time
unsigned long currentTimeMiliseconds = GetCurrentTimeMiliseconds();
@@
-564,10
+560,9
@@
void Thread::PushTimedEvent(void *event,
// Trigger invoker
m_timedEventInvoker.Signal();
// Trigger invoker
m_timedEventInvoker.Signal();
- LogPedantic(
- "Timed event pushed and invoker signaled: due time: " <<
- dueTimeMiliseconds << " ms, absolute due time: " <<
- currentTimeMiliseconds + dueTimeMiliseconds << " ms");
+ WrtLogD("Timed event pushed and invoker signaled: "
+ "due time: %lu ms, absolute due time: %lu ms",
+ dueTimeMiliseconds, currentTimeMiliseconds + dueTimeMiliseconds);
}
Thread *Thread::GetInvokerThread()
}
Thread *Thread::GetInvokerThread()