4 * Copyright (Thread::*c) 2000 - 2013 Samsung Electronics Co., Ltd. All rights reserved.
8 * Woojin Jung <woojin2.jung@samsung.com>
9 * Yeongtaik Byeon <yeongtaik.byeon@samsung.com>
10 * Jaewon Lim <jaewon81.lim@samsung.com>
11 * Juyoung Kim <j0.kim@samsung.com>
12 * Anastasia Lyupa <a.lyupa@samsung.com>
14 * This library is free software; you can redistribute it and/or modify it under
15 * the terms of the GNU Lesser General Public License as published by the
16 * Free Software Foundation; either version 2.1 of the License, or (at your option)
19 * This library is distributed in the hope that it will be useful, but WITHOUT ANY
20 * WARRANTY; without even the implied warranty of MERCHANTABILITY or
21 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
22 * License for more details.
24 * You should have received a copy of the GNU Lesser General Public License
25 * along with this library; if not, write to the Free Software Foundation, Inc., 51
26 * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
30 * - Samsung RnD Institute Russia
35 #include <FBaseDataType.h>
36 #include <FBaseRtIRunnable.h>
40 #include "probeinfo.h"
45 static enum DaOptions _sopt = OPT_THREAD;
47 extern __thread unsigned int gProbeDepth;
53 THREAD_TYPE_WORKER = 0, /**< The worker thread mode */
54 THREAD_TYPE_EVENT_DRIVEN, /**< The event-driven thread mode */
56 // This enum value is for internal use only. Using this enum value can cause behavioral,
57 // security-related, and consistency-related issues in the application.
58 // The main thread mode
62 THREAD_PRIORITY_HIGH, /**< The high priority*/
63 THREAD_PRIORITY_MID, /**< The mid priority*/
65 /**< The low priority*/
70 const static unsigned long DEFAULT_STACK_SIZE = 64 * 1024;
72 static result Sleep(long milliSeconds);
73 static Thread* GetCurrentThread(void);
74 static result Yield(void);
75 static result Exit(int exitCode=0x00);
77 result Construct(ThreadType threadType, long stackSize, // deprecated
78 ThreadPriority priority = THREAD_PRIORITY_MID);
79 result Construct(long stackSize = DEFAULT_STACK_SIZE,
80 ThreadPriority priority = THREAD_PRIORITY_MID);
81 result Construct(const Tizen::Base::String &name, long stackSize =
82 DEFAULT_STACK_SIZE, ThreadPriority priority = THREAD_PRIORITY_MID);
83 result Construct(const Tizen::Base::String &name, ThreadType threadType, // deprecated
84 long stackSize = DEFAULT_STACK_SIZE, ThreadPriority priority =
86 result Construct(IRunnable &target, long stackSize = DEFAULT_STACK_SIZE,
87 ThreadPriority priority = THREAD_PRIORITY_MID);
88 result Construct(const Tizen::Base::String &name, IRunnable &target,
89 long stackSize = DEFAULT_STACK_SIZE, ThreadPriority priority =
91 result GetExitCode(int &exitCode) const;
92 const Tizen::Base::String & GetName(void) const;
94 // virtual bool OnStart(void); // deprecated
95 // virtual void OnStop(void); // deprecated
96 // virtual void OnUserEventReceivedN(RequestId requestId, // deprecated
97 // Tizen::Base::Collection::IList *pArgs);
98 // virtual Tizen::Base::Object * Run(void);
99 // virtual result SendUserEvent(RequestId requestId, // deprecated
100 // const Tizen::Base::Collection::IList *pArgs);
102 result Stop(void); // deprecated
105 // virtual ~Thread(void);
108 // Thread(const Thread& rhs);
109 // Thread& operator =(const Thread& rhs);
111 // friend class _ThreadImpl;
112 // class _ThreadImpl* __pThreadImpl;
117 // virtual result Stop(void);
119 // virtual result Finalize(void);
120 const Thread* GetThread(void) const;
122 static void* ThreadProc(void* pParam);
127 //_ThreadImpl::GetThread(void) const
129 // typedef const Thread*
130 // (_ThreadImpl::*methodType)(void) const;
131 // static methodType GetThreadp = 0;
132 // probeInfo_t probeInfo;
135 // bool bfiltering = false;
138 // if (!GetThreadp) {
139 // probeBlockStart();
140 // void* lib_handle = dlopen("libosp-appfw.so", RTLD_LAZY);
141 // if (lib_handle == NULL) {
142 // perror("dlopen failed : libosp-appfw.so");
145 // tmpPtr = dlsym(lib_handle, "_ZNK5Tizen4Base7Runtime11_ThreadImpl9GetThreadEv");
147 // if (tmpPtr == NULL || dlerror() != NULL) {
148 // perror("dlsym failed : Tizen::Base::Runtime::_ThreadImpl::GetThreadp");
152 // memcpy(&GetThreadp, &tmpPtr, sizeof(tmpPtr));
157 // if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
158 // setProbePoint(&probeInfo);
162 // const Thread* ret = (this->*GetThreadp)();
163 // result res = GetLastResult();
165 // if (postBlockBegin(blockresult)) {
168 // log.data[0] = '\0';
169 // log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", LC_THREAD,
170 // probeInfo.eventIndex, "_ThreadImpl::GetThread", probeInfo.currentTime,
171 // probeInfo.pID, probeInfo.tID);
174 // log.length += sprintf(log.data + log.length, "`,`,0x%x",ret);
175 // //PCAddr,errno,InternalCall,size,FD,FDType,FDApiType,FileSize,FilePath
176 // log.length += sprintf(log.data + log.length,
177 // "`,0`,%ld`,%d`,0`,%u`,0x%x`,%d`,%d`,`,", res,blockresult,
178 // (unsigned int)CALLER_ADDRESS, (unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_OTHER);
180 // log.length += sprintf(log.data + log.length, "`,\ncallstack_start`,");
181 // getBacktraceString(&log, 4096 - log.length - 17);
182 // log.length += sprintf(log.data + log.length, "`,callstack_end");
184 // printLog(&log, MSG_LOG);
190 class EventDrivenThread : public Thread {
192 result Construct(long stackSize = DEFAULT_STACK_SIZE,
193 ThreadPriority priority = THREAD_PRIORITY_MID);
194 result Construct(const Tizen::Base::String &name, long stackSize =
195 DEFAULT_STACK_SIZE, ThreadPriority priority = THREAD_PRIORITY_MID);
197 virtual result Quit();
198 // virtual bool OnStart(void);
199 // virtual void OnStop(void);
200 // virtual void OnUserEventReceivedN(RequestId requestId,
201 // Tizen::Base::Collection::IList *pArgs);
202 // virtual Tizen::Base::Object * Run(void);
203 // virtual result SendUserEvent(RequestId requestId,
204 // const Tizen::Base::Collection::IList *pArgs);
206 // EventDrivenThread(void);
207 // virtual ~EventDrivenThread(void);
210 // EventDrivenThread(const EventDrivenThread& rhs);
211 // EventDrivenThread& operator = (const EventDrivenThread& rhs);
213 // class _EventDrivenThreadImpl* __pEventDrivenThreadImpl;
214 // friend class _EventDrivenThreadImpl;
219 _ThreadImpl::ThreadProc(void* params) {
221 (*methodType)(void*);
222 static methodType ThreadProcp = 0;
223 probeInfo_t probeInfo;
225 bool bfiltering = false;
230 if(lib_handle[LIBOSP_APPFW] == NULL) {
231 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
232 if (lib_handle[LIBOSP_APPFW] == NULL) {
233 perror("dlopen failed : libosp-appfw.so");
237 tmpPtr = dlsym(lib_handle[LIBOSP_APPFW], "_ZN5Tizen4Base7Runtime11_ThreadImpl10ThreadProcEPv");
239 if (tmpPtr == NULL || dlerror() != NULL) {
240 perror("dlsym failed : Tizen::Base::Runtime::_ThreadImpl::ThreadProc");
244 memcpy(&ThreadProcp, &tmpPtr, sizeof(tmpPtr));
249 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
250 setProbePoint(&probeInfo);
252 _ThreadImpl* pSelf =(_ThreadImpl*)params;
253 const Thread* pThread = NULL;
255 pThread = pSelf->GetThread();
259 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
260 API_ID_void___ThreadImpl__ThreadProc_void__params_,
262 PACK_COMMON_END((unsigned int)pSelf, 0, blockresult);
263 PACK_THREAD((unsigned int)pThread, THREAD_OSPTHREAD_WORKER, THREAD_API_INTERNAL_START);
268 // all probe should be reachable inside thread start_routine (user implemented Thread::Run)
270 TRACE_STATE_UNSET(TS_ENTER_PROBE_BLOCK);
271 (ThreadProcp)(params);
272 TRACE_STATE_SET(TS_ENTER_PROBE_BLOCK);
275 if (postBlockBegin(blockresult)) {
276 setProbePoint(&probeInfo);
278 _ThreadImpl* pSelf =(_ThreadImpl*)params;
279 const Thread* pThread = NULL;
281 pThread = pSelf->GetThread();
285 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
286 API_ID_void___ThreadImpl__ThreadProc_void__params_,
288 PACK_COMMON_END((unsigned int)pSelf, 0, blockresult);
289 PACK_THREAD((unsigned int)pThread, THREAD_OSPTHREAD_WORKER, THREAD_API_INTERNAL_STOP);
296 //result _ThreadImpl::Stop(void) {
298 // (_ThreadImpl::*methodType)(void);
299 // static methodType Stopp = 0;
300 // probeInfo_t probeInfo;
303 // bool bfiltering = true;
307 // probeBlockStart();
308 // void* lib_handle = dlopen("libosp-appfw.so", RTLD_LAZY);
309 // if (lib_handle == NULL) {
310 // perror("dlopen failed : libosp-appfw.so");
313 // tmpPtr = dlsym(lib_handle, "_ZN5Tizen4Base7Runtime11_ThreadImpl4StopEv");
315 // if (tmpPtr == NULL || dlerror() != NULL) {
316 // perror("dlsym failed : Tizen::Base::Runtime::_ThreadImpl::Stopp");
320 // memcpy(&Stopp, &tmpPtr, sizeof(tmpPtr));
325 // if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
326 // setProbePoint(&probeInfo);
330 // result ret= (this->*Stopp)();
332 // if (postBlockBegin(blockresult)) {
335 // log.data[0] = '\0';
336 // log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", LC_THREAD,
337 // probeInfo.eventIndex, "_ThreadImpl::Stop", probeInfo.currentTime,
338 // probeInfo.pID, probeInfo.tID);
340 // log.length += sprintf(log.data + log.length, "`,`,%ld", ret);
341 // //PCAddr,errno,InternalCall,size,FD,FDType,FDApiType,FileSize,FilePath
342 // log.length += sprintf(log.data + log.length,
343 // "`,0`,%ld`,%d`,0`,%u`,0x%x`,%d`,%d`,`,", ret, blockresult,
344 // (unsigned int)CALLER_ADDRESS, (unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_CLOSE);
346 // log.length += sprintf(log.data + log.length, "`,\ncallstack_start`,");
347 // getBacktraceString(&log, 4096 - log.length - 17);
348 // log.length += sprintf(log.data + log.length, "`,callstack_end");
350 // printLog(&log, MSG_LOG);
356 //result _ThreadImpl::Finalize(void) {
358 // (_ThreadImpl::*methodType)(void);
359 // static methodType Finalizep = 0;
360 // probeInfo_t probeInfo;
363 // bool bfiltering = false;
367 // probeBlockStart();
368 // void* lib_handle = dlopen("libosp-appfw.so", RTLD_LAZY);
369 // if (lib_handle == NULL) {
370 // perror("dlopen failed : libosp-appfw.so");
373 // tmpPtr = dlsym(lib_handle, "_ZN5Tizen4Base7Runtime11_ThreadImpl8FinalizeEv");
375 // if (tmpPtr == NULL || dlerror() != NULL) {
376 // perror("dlsym failed : Tizen::Base::Runtime::_ThreadImpl::Finalizep");
380 // memcpy(&Finalizep, &tmpPtr, sizeof(tmpPtr));
384 // if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
385 // setProbePoint(&probeInfo);
389 // result ret= (this->*Finalizep)();
391 // if (postBlockBegin(blockresult)) {
394 // log.data[0] = '\0';
395 // log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", LC_THREAD,
396 // probeInfo.eventIndex, "_ThreadImpl::Finalize", probeInfo.currentTime,
397 // probeInfo.pID, probeInfo.tID);
399 // log.length += sprintf(log.data + log.length, "`,`,%ld", ret);
400 // //PCAddr,errno,InternalCall,size,FD,FDType,FDApiType,FileSize,FilePath
401 // log.length += sprintf(log.data + log.length,
402 // "`,0`,%ld`,%d`,0`,%u`,0x%x`,%d`,%d`,`,", ret, blockresult,
403 // (unsigned int)CALLER_ADDRESS, (unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_CLOSE);
405 // log.length += sprintf(log.data + log.length, "`,\ncallstack_start`,");
406 // getBacktraceString(&log, 4096 - log.length - 17);
407 // log.length += sprintf(log.data + log.length, "`,callstack_end");
409 // printLog(&log, MSG_LOG);
414 //Thread::Thread(void) {
415 // typedef void (Thread::*methodType)();
416 // static methodType Threadp = 0;
417 // probeInfo_t probeInfo;
420 // bool bfiltering = true;
424 // probeBlockStart();
426 // tmpPtr = dlsym(RTLD_NEXT, "_ZN5Tizen4Base7Runtime6ThreadC1Ev");
428 // if (tmpPtr == NULL || dlerror() != NULL) {
431 // log.data[0] = '\0';
432 // log.length = sprintf(log.data,"dlsym failed : Tizen::Base::Runtime::Thread::Thread");
433 // perror("dlsym failed : Tizen::Base::Runtime::Thread::Thread");
434 // printLog(&log, MSG_MSG);
438 // memcpy(&Threadp, &tmpPtr, sizeof(tmpPtr));
442 // if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
443 // setProbePoint(&probeInfo);
447 // (this->*Threadp)();
449 // if (postBlockBegin(blockresult)) {
452 // log.data[0] = '\0';
453 // log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", LC_THREAD,
454 // probeInfo.eventIndex, "Thread::Thread", probeInfo.currentTime,
455 // probeInfo.pID, probeInfo.tID);
457 // log.length += sprintf(log.data + log.length, "`,`,");
458 // //PCAddr,errno,InternalCall,size,FD,FDType,FDApiType,FileSize,FilePath
460 // log.length += sprintf(log.data + log.length,
461 // "`,0`,0`,%d`,0`,0x%x`,%d`,%d`,`,", blockresult,
462 // (unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_OPEN);
464 // log.length += sprintf(log.data + log.length, "`,\ncallstack_start`,");
465 // getBacktraceString(&log, 4096 - log.length - 17);
466 // log.length += sprintf(log.data + log.length, "`,callstack_end");
468 // printLog(&log, MSG_LOG);
473 //Thread::~Thread(void) {
474 // typedef void (Thread::*methodType)();
475 // static methodType ThreadDp = 0;
476 // probeInfo_t probeInfo;
479 // bool bfiltering = true;
483 // probeBlockStart();
485 // void* lib_handle = dlopen("libosp-appfw.so", RTLD_LAZY);
486 // if (lib_handle == NULL) {
487 // perror("dlopen failed : libosp-appfw.so");
490 // tmpPtr = dlsym(lib_handle, "_ZN5Tizen4Base7Runtime6ThreadD0Ev");
492 // if (tmpPtr == NULL || dlerror() != NULL) {
493 // perror("dlsym failed : Tizen::Base::Runtime::Thread::~Thread");
497 // memcpy(&ThreadDp, &tmpPtr, sizeof(tmpPtr));
501 // if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
502 // setProbePoint(&probeInfo);
506 // (this->*ThreadDp)();
508 // if (postBlockBegin(blockresult)) {
511 // log.data[0] = '\0';
512 // log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", LC_THREAD,
513 // probeInfo.eventIndex, "Thread::~Thread", probeInfo.currentTime,
514 // probeInfo.pID, probeInfo.tID);
516 // log.length += sprintf(log.data + log.length, "`,`,");
517 // //PCAddr,errno,InternalCall,size,FD,FDType,FDApiType,FileSize,FilePath
519 // log.length += sprintf(log.data + log.length,
520 // "`,0`,0`,%d`,0`,0x%x`,%d`,%d`,`,", blockresult,
521 // (unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_CLOSE);
523 // log.length += sprintf(log.data + log.length, "`,\ncallstack_start`,");
524 // getBacktraceString(&log, 4096 - log.length - 17);
525 // log.length += sprintf(log.data + log.length, "`,callstack_end");
527 // printLog(&log, MSG_LOG);
531 result Thread::Sleep(long milliSeconds) {
534 static methodType Sleepp = 0;
535 probeInfo_t probeInfo;
537 bool bfiltering = true;
542 if(lib_handle[LIBOSP_APPFW] == NULL) {
543 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
544 if (lib_handle[LIBOSP_APPFW] == NULL) {
545 perror("dlopen failed : libosp-appfw.so");
549 tmpPtr = dlsym(lib_handle[LIBOSP_APPFW], "_ZN5Tizen4Base7Runtime6Thread5SleepEl");
551 if (tmpPtr == NULL || dlerror() != NULL) {
552 perror("dlsym failed : Tizen::Base::Runtime::Thread::Sleep");
556 memcpy(&Sleepp, &tmpPtr, sizeof(tmpPtr));
561 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
562 setProbePoint(&probeInfo);
564 Thread *currentThread;
565 currentThread = GetCurrentThread();
568 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
569 API_ID_result_Thread__Sleep_long_milliSeconds_,
571 PACK_COMMON_END(0, 0, blockresult);
572 PACK_THREAD((unsigned int)currentThread, THREAD_OSPTHREAD_WORKER, THREAD_API_WAIT_START);
578 result ret = (Sleepp)(milliSeconds);
580 if (postBlockBegin(blockresult)) {
581 setProbePoint(&probeInfo);
583 Thread *currentThread;
584 currentThread = GetCurrentThread();
587 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
588 API_ID_result_Thread__Yield_void_,
590 PACK_COMMON_END(ret, ret, blockresult);
591 PACK_THREAD((unsigned int)currentThread, THREAD_OSPTHREAD_WORKER, THREAD_API_WAIT_END);
599 Thread* Thread::GetCurrentThread(void) {
602 static methodType GetCurrentThreadp = 0;
603 probeInfo_t probeInfo;
605 bool bfiltering = true;
608 if (!GetCurrentThreadp) {
610 if(lib_handle[LIBOSP_APPFW] == NULL) {
611 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
612 if (lib_handle[LIBOSP_APPFW] == NULL) {
613 perror("dlopen failed : libosp-appfw.so");
617 tmpPtr = dlsym(lib_handle[LIBOSP_APPFW], "_ZN5Tizen4Base7Runtime6Thread16GetCurrentThreadEv");
619 if (tmpPtr == NULL || dlerror() != NULL) {
620 perror("dlsym failed : Tizen::Base::Runtime::Thread::GetCurrentThread");
624 memcpy(&GetCurrentThreadp, &tmpPtr, sizeof(tmpPtr));
629 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
630 setProbePoint(&probeInfo);
634 Thread *currentThread = (GetCurrentThreadp)();
635 result res = GetLastResult();
637 if (postBlockBegin(blockresult)) {
640 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
641 API_ID_Thread__Thread__GetCurrentThread_void_,
643 PACK_COMMON_END((unsigned int)currentThread, res, blockresult);
644 PACK_THREAD((unsigned int)currentThread, THREAD_OSPTHREAD_WORKER, THREAD_API_OTHER);
649 return currentThread;
652 result Thread::Yield(void) {
655 static methodType Yieldp = 0;
656 probeInfo_t probeInfo;
658 bool bfiltering = true;
663 if(lib_handle[LIBOSP_APPFW] == NULL) {
664 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
665 if (lib_handle[LIBOSP_APPFW] == NULL) {
666 perror("dlopen failed : libosp-appfw.so");
670 tmpPtr = dlsym(lib_handle[LIBOSP_APPFW], "_ZN5Tizen4Base7Runtime6Thread5YieldEv");
672 if (tmpPtr == NULL || dlerror() != NULL) {
673 perror("dlsym failed : Tizen::Base::Runtime::Thread::Yield");
677 memcpy(&Yieldp, &tmpPtr, sizeof(tmpPtr));
682 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
683 setProbePoint(&probeInfo);
687 result ret = (Yieldp)();
689 if (postBlockBegin(blockresult)) {
690 Thread *currentThread;
691 currentThread = GetCurrentThread();
694 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
695 API_ID_result_Thread__Yield_void_,
697 PACK_COMMON_END(ret, ret, blockresult);
698 PACK_THREAD((unsigned int)currentThread, THREAD_OSPTHREAD_WORKER, THREAD_API_OTHER);
706 result Thread::Exit(int exitCode) {
708 (*methodType)(int exitCode);
709 static methodType Exitp = 0;
710 probeInfo_t probeInfo;
712 bool bfiltering = true;
717 if(lib_handle[LIBOSP_APPFW] == NULL) {
718 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
719 if (lib_handle[LIBOSP_APPFW] == NULL) {
720 perror("dlopen failed : libosp-appfw.so");
724 tmpPtr = dlsym(lib_handle[LIBOSP_APPFW], "_ZN5Tizen4Base7Runtime6Thread4ExitEi");
726 if (tmpPtr == NULL || dlerror() != NULL) {
727 perror("dlsym failed : Tizen::Base::Runtime::Thread::Exit");
731 memcpy(&Exitp, &tmpPtr, sizeof(tmpPtr));
736 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
737 setProbePoint(&probeInfo);
739 Thread *currentThread;
740 currentThread = GetCurrentThread();
743 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
744 API_ID_result_Thread__Exit_int_exitCode_,
746 PACK_COMMON_END(0, 0, blockresult);
747 PACK_THREAD((unsigned int)currentThread, THREAD_OSPTHREAD_WORKER, THREAD_API_EXIT);
753 result ret = (Exitp)(exitCode);
758 result Thread::Construct(ThreadType threadType, long stackSize,
759 ThreadPriority priority) {
761 (Thread::*methodType)(ThreadType threadType, long stackSize,
762 ThreadPriority priority);
763 static methodType Constructp = 0;
765 probeInfo_t probeInfo;
767 bool bfiltering = true;
772 if(lib_handle[LIBOSP_APPFW] == NULL) {
773 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
774 if (lib_handle[LIBOSP_APPFW] == NULL) {
775 perror("dlopen failed : libosp-appfw.so");
781 lib_handle[LIBOSP_APPFW],
782 "_ZN5Tizen4Base7Runtime6Thread9ConstructENS1_10ThreadTypeElNS1_14ThreadPriorityE");
784 if (tmpPtr == NULL || dlerror() != NULL) {
785 perror("dlsym failed : Tizen::Base::Runtime::Thread::Construct");
789 memcpy(&Constructp, &tmpPtr, sizeof(tmpPtr));
793 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
794 setProbePoint(&probeInfo);
798 ret = (this->*Constructp)(threadType, stackSize, priority);
800 if (postBlockBegin(blockresult)) {
803 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
804 API_ID_result_Thread__Construct_ThreadType_threadType__long_stackSize__ThreadPriority_priority_,
805 "dxd", threadType, stackSize, priority);
806 PACK_COMMON_END(ret, ret, blockresult);
807 PACK_THREAD((unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_NEW);
814 result Thread::Construct(long stackSize, ThreadPriority priority) {
816 (Thread::*methodType)(long stackSize, ThreadPriority priority);
817 static methodType Constructp = 0;
819 probeInfo_t probeInfo;
821 bool bfiltering = true;
826 if(lib_handle[LIBOSP_APPFW] == NULL) {
827 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
828 if (lib_handle[LIBOSP_APPFW] == NULL) {
829 perror("dlopen failed : libosp-appfw.so");
833 tmpPtr = dlsym(lib_handle[LIBOSP_APPFW],
834 "_ZN5Tizen4Base7Runtime6Thread9ConstructElNS1_14ThreadPriorityE");
835 if (tmpPtr == NULL || dlerror() != NULL) {
836 perror("dlsym failed : Tizen::Base::Runtime::Thread::Construct");
840 memcpy(&Constructp, &tmpPtr, sizeof(tmpPtr));
844 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
845 setProbePoint(&probeInfo);
849 ret = (this->*Constructp)(stackSize, priority);
851 if (postBlockBegin(blockresult)) {
854 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
855 API_ID_result_Thread__Construct_long_stackSize__ThreadPriority_priority_,
856 "xd", stackSize, priority);
857 PACK_COMMON_END(ret, ret, blockresult);
858 PACK_THREAD((unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_NEW);
865 result Thread::Construct(const Tizen::Base::String &name, long stackSize,
866 ThreadPriority priority) {
868 (Thread::*methodType)(const Tizen::Base::String &name, long stackSize,
869 ThreadPriority priority);
870 static methodType Constructp = 0;
872 probeInfo_t probeInfo;
874 bool bfiltering = true;
880 if(lib_handle[LIBOSP_APPFW] == NULL) {
881 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
882 if (lib_handle[LIBOSP_APPFW] == NULL) {
883 perror("dlopen failed : libosp-appfw.so");
889 lib_handle[LIBOSP_APPFW],
890 "_ZN5Tizen4Base7Runtime6Thread9ConstructERKNS0_6StringElNS1_14ThreadPriorityE");
892 if (tmpPtr == NULL || dlerror() != NULL) {
893 perror("dlsym failed : Tizen::Base::Runtime::Thread::Construct");
897 memcpy(&Constructp, &tmpPtr, sizeof(tmpPtr));
901 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
902 setProbePoint(&probeInfo);
906 ret = (this->*Constructp)(name, stackSize, priority);
908 if (postBlockBegin(blockresult)) {
911 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
912 API_ID_result_Thread__Construct_const_Tizen__Base__String__name__long_stackSize__ThreadPriority_priority_,
913 "sxd", temp, stackSize, priority);
914 PACK_COMMON_END(ret, ret, blockresult);
915 PACK_THREAD((unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_NEW);
922 result Thread::Construct(const Tizen::Base::String &name, ThreadType threadType,
923 long stackSize, ThreadPriority priority) {
925 (Thread::*methodType)(const Tizen::Base::String &name, ThreadType threadType,
926 long stackSize, ThreadPriority priority);
927 static methodType Constructp = 0;
929 probeInfo_t probeInfo;
931 bool bfiltering = true;
937 if(lib_handle[LIBOSP_APPFW] == NULL) {
938 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
939 if (lib_handle[LIBOSP_APPFW] == NULL) {
940 perror("dlopen failed : libosp-appfw.so");
947 lib_handle[LIBOSP_APPFW],
948 "_ZN5Tizen4Base7Runtime6Thread9ConstructERKNS0_6StringENS1_10ThreadTypeElNS1_14ThreadPriorityE");
949 if (tmpPtr == NULL || dlerror() != NULL) {
950 perror("dlsym failed : Tizen::Base::Runtime::Thread::Construct");
954 memcpy(&Constructp, &tmpPtr, sizeof(tmpPtr));
958 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
959 setProbePoint(&probeInfo);
963 ret = (this->*Constructp)(name, threadType, stackSize, priority);
965 if (postBlockBegin(blockresult)) {
967 WcharToChar(temp, name.GetPointer());
970 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
971 API_ID_result_Thread__Construct_const_Tizen__Base__String__name__ThreadType_threadType__long_stackSize__ThreadPriority_priority_,
972 "sdxd", temp, threadType, stackSize, priority);
973 PACK_COMMON_END(ret, ret, blockresult);
974 PACK_THREAD((unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_NEW);
981 result Thread::Construct(IRunnable &target, long stackSize,
982 ThreadPriority priority) {
984 (Thread::*methodType)(IRunnable &target, long stackSize,
985 ThreadPriority priority);
986 static methodType Constructp = 0;
988 probeInfo_t probeInfo;
990 bool bfiltering = true;
995 if(lib_handle[LIBOSP_APPFW] == NULL) {
996 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
997 if (lib_handle[LIBOSP_APPFW] == NULL) {
998 perror("dlopen failed : libosp-appfw.so");
1004 lib_handle[LIBOSP_APPFW],
1005 "_ZN5Tizen4Base7Runtime6Thread9ConstructERNS1_9IRunnableElNS1_14ThreadPriorityE");
1007 if (tmpPtr == NULL || dlerror() != NULL) {
1008 perror("dlsym failed : Tizen::Base::Runtime::Thread::Construct");
1012 memcpy(&Constructp, &tmpPtr, sizeof(tmpPtr));
1016 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
1017 setProbePoint(&probeInfo);
1021 ret = (this->*Constructp)(target, stackSize, priority);
1023 if (postBlockBegin(blockresult)) {
1025 PREPARE_LOCAL_BUF();
1026 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
1027 API_ID_result_Thread__Construct_IRunnable__target__long_stackSize__ThreadPriority_priority_,
1028 "xxd", (unsigned int) &target, stackSize, priority);
1029 PACK_COMMON_END(ret, ret, blockresult);
1030 PACK_THREAD((unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_NEW);
1037 result Thread::Construct(const Tizen::Base::String &name, IRunnable &target,
1038 long stackSize, ThreadPriority priority) {
1040 (Thread::*methodType)(const Tizen::Base::String &name, IRunnable &target,
1041 long stackSize, ThreadPriority priority);
1042 static methodType Constructp = 0;
1044 probeInfo_t probeInfo;
1046 bool bfiltering = true;
1052 if(lib_handle[LIBOSP_APPFW] == NULL) {
1053 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
1054 if (lib_handle[LIBOSP_APPFW] == NULL) {
1055 perror("dlopen failed : libosp-appfw.so");
1061 lib_handle[LIBOSP_APPFW],
1062 "_ZN5Tizen4Base7Runtime6Thread9ConstructERKNS0_6StringERNS1_9IRunnableElNS1_14ThreadPriorityE");
1064 if (tmpPtr == NULL || dlerror() != NULL) {
1065 perror("dlsym failed : Tizen::Base::Runtime::Thread::Construct");
1069 memcpy(&Constructp, &tmpPtr, sizeof(tmpPtr));
1073 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
1074 setProbePoint(&probeInfo);
1078 ret = (this->*Constructp)(name, target, stackSize, priority);
1080 if (postBlockBegin(blockresult)) {
1082 WcharToChar(temp, name.GetPointer());
1084 PREPARE_LOCAL_BUF();
1085 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
1086 API_ID_result_Thread__Construct_const_Tizen__Base__String__name__IRunnable__target__long_stackSize__ThreadPriority_priority_,
1087 "sxxd", temp, (unsigned int) &target, stackSize, priority);
1088 PACK_COMMON_END(ret, ret, blockresult);
1089 PACK_THREAD((unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_NEW);
1097 result Thread::GetExitCode(int &exitCode) const {
1099 (Thread::*methodType)(int &exitCode) const;
1100 static methodType GetExitCodep = 0;
1102 probeInfo_t probeInfo;
1104 bool bfiltering = true;
1106 // int exitOld = exitCode;
1108 if (!GetExitCodep) {
1110 if(lib_handle[LIBOSP_APPFW] == NULL) {
1111 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
1112 if (lib_handle[LIBOSP_APPFW] == NULL) {
1113 perror("dlopen failed : libosp-appfw.so");
1117 tmpPtr = dlsym(lib_handle[LIBOSP_APPFW],
1118 "_ZNK5Tizen4Base7Runtime6Thread11GetExitCodeERi");
1120 if (tmpPtr == NULL || dlerror() != NULL) {
1121 perror("dlsym failed : Tizen::Base::Runtime::Thread::GetExitCode");
1125 memcpy(&GetExitCodep, &tmpPtr, sizeof(tmpPtr));
1129 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
1130 setProbePoint(&probeInfo);
1134 ret = (this->*GetExitCodep)(exitCode);
1136 if (postBlockBegin(blockresult)) {
1138 PREPARE_LOCAL_BUF();
1139 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
1140 API_ID_result_Thread__GetExitCode_int__exitCode__const,
1142 PACK_COMMON_END(ret, ret, blockresult);
1143 PACK_THREAD((unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_OTHER);
1151 const Tizen::Base::String & Thread::GetName(void) const {
1152 typedef const Tizen::Base::String &
1153 (Thread::*methodType)(void) const;
1154 static methodType GetNamep = 0;
1155 probeInfo_t probeInfo;
1157 bool bfiltering = true;
1163 if(lib_handle[LIBOSP_APPFW] == NULL) {
1164 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
1165 if (lib_handle[LIBOSP_APPFW] == NULL) {
1166 perror("dlopen failed : libosp-appfw.so");
1170 tmpPtr = dlsym(lib_handle[LIBOSP_APPFW], "_ZNK5Tizen4Base7Runtime6Thread7GetNameEv");
1172 if (tmpPtr == NULL || dlerror() != NULL) {
1173 perror("dlsym failed : Tizen::Base::Runtime::Thread::GetName");
1177 memcpy(&GetNamep, &tmpPtr, sizeof(tmpPtr));
1181 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
1182 setProbePoint(&probeInfo);
1186 const Tizen::Base::String& ret = (this->*GetNamep)();
1187 result res = GetLastResult();
1189 if (postBlockBegin(blockresult)) {
1191 WcharToChar(temp, ret.GetPointer());
1193 PREPARE_LOCAL_BUF();
1194 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
1195 API_ID_const_Tizen__Base__String___Thread__GetName_void__const,
1197 PACK_COMMON_END(ret.GetPointer(), res, blockresult);
1198 PACK_THREAD((unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_OTHER);
1206 result Thread::Join(void) {
1208 (Thread::*methodType)(void);
1209 static methodType Joinp = 0;
1211 probeInfo_t probeInfo;
1213 bool bfiltering = true;
1218 if(lib_handle[LIBOSP_APPFW] == NULL) {
1219 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
1220 if (lib_handle[LIBOSP_APPFW] == NULL) {
1221 perror("dlopen failed : libosp-appfw.so");
1225 tmpPtr = dlsym(lib_handle[LIBOSP_APPFW], "_ZN5Tizen4Base7Runtime6Thread4JoinEv");
1227 if (tmpPtr == NULL || dlerror() != NULL) {
1228 perror("dlsym failed : Tizen::Base::Runtime::Thread::Join");
1232 memcpy(&Joinp, &tmpPtr, sizeof(tmpPtr));
1236 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
1237 setProbePoint(&probeInfo);
1239 PREPARE_LOCAL_BUF();
1240 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
1241 API_ID_result_Thread__Join_void_,
1243 PACK_COMMON_END(0, 0, blockresult);
1244 PACK_THREAD((unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_WAIT_START);
1250 ret = (this->*Joinp)();
1252 if (postBlockBegin(blockresult)) {
1253 setProbePoint(&probeInfo);
1255 PREPARE_LOCAL_BUF();
1256 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
1257 API_ID_result_Thread__Join_void_,
1259 PACK_COMMON_END(ret, ret, blockresult);
1260 PACK_THREAD((unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_WAIT_END);
1267 //Tizen::Base::Object * Thread::Run(void) {
1268 // typedef Tizen::Base::Object * (Thread::*methodType)(void);
1269 // static methodType Runp = 0;
1270 // Tizen::Base::Object * ret;
1271 // probeInfo_t probeInfo;
1274 // bool bfiltering = true;
1278 // log.data[0] = '\0';
1279 // log.length = sprintf(log.data, "call Thread::Run");
1280 // printLog(&log, MSG_MSG);
1283 // probeBlockStart();
1284 // void* lib_handle = dlopen("libosp-appfw.so", RTLD_LAZY);
1285 // if (lib_handle == NULL) {
1286 // perror("dlopen failed : libosp-appfw.so");
1289 // log.data[0] = '\0';
1290 // log.length = sprintf(log.data, "dlopen failed :libosp-appfw.so");
1291 // printLog(&log, MSG_MSG);
1297 // "_ZN5Tizen4Base7Runtime6Thread3RunEv");
1299 // if (tmpPtr == NULL || dlerror() != NULL) {
1300 // perror("dlsym failed : Thread::Run");
1303 // log.data[0] = '\0';
1304 // log.length = sprintf(log.data, "dlsym failed : Thread::Run");
1305 // printLog(&log, MSG_MSG);
1309 // memcpy(&Runp, &tmpPtr, sizeof(tmpPtr));
1313 // if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
1314 // setProbePoint(&probeInfo);
1318 // ret = (this->*Runp)();
1320 // if (postBlockBegin(blockresult)) {
1323 // log.data[0] = '\0';
1324 // log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", LC_THREAD,
1325 // probeInfo.eventIndex, "Thread::Run",
1326 // probeInfo.currentTime, probeInfo.pID, probeInfo.tID);
1328 // log.length += sprintf(log.data + log.length, "`,`,0x%x",(unsigned int)ret;
1329 // //PCAddr,errno,InternalCall,size,FD,FDType,FDApiType,FileSize,FilePath
1332 // log.length += sprintf(log.data + log.length,
1333 // "`,0`,0`,%d`,0`,0x%x`,%d`,%d`,`,", blockresult,
1334 // (unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_OTHER);
1336 // log.length += sprintf(log.data + log.length, "`,\ncallstack_start`,");
1337 // getBacktraceString(&log, 4096 - log.length - 17);
1338 // log.length += sprintf(log.data + log.length, "`,callstack_end");
1340 // printLog(&log, MSG_LOG);
1346 result Thread::Start(void) {
1347 typedef result (Thread::*methodType)(void);
1348 static methodType Startp = 0;
1350 probeInfo_t probeInfo;
1352 bool bfiltering = true;
1357 if(lib_handle[LIBOSP_APPFW] == NULL) {
1358 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
1359 if (lib_handle[LIBOSP_APPFW] == NULL) {
1360 perror("dlopen failed : libosp-appfw.so");
1364 tmpPtr = dlsym(lib_handle[LIBOSP_APPFW], "_ZN5Tizen4Base7Runtime6Thread5StartEv");
1366 if (tmpPtr == NULL || dlerror() != NULL) {
1367 perror("dlsym failed : Tizen::Base::Runtime::Thread::Start");
1371 memcpy(&Startp, &tmpPtr, sizeof(tmpPtr));
1375 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
1376 setProbePoint(&probeInfo);
1380 ret = (this->*Startp)();
1382 if (postBlockBegin(blockresult)) {
1384 PREPARE_LOCAL_BUF();
1385 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
1386 API_ID_result_Thread__Start_void_,
1388 PACK_COMMON_END(ret, ret, blockresult);
1389 PACK_THREAD((unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_START);
1396 result Thread::Stop(void) {
1397 typedef result (Thread::*methodType)(void);
1398 static methodType Stopp = 0;
1400 probeInfo_t probeInfo;
1402 bool bfiltering = true;
1407 if(lib_handle[LIBOSP_APPFW] == NULL) {
1408 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
1409 if (lib_handle[LIBOSP_APPFW] == NULL) {
1410 perror("dlopen failed : libosp-appfw.so");
1414 tmpPtr = dlsym(lib_handle[LIBOSP_APPFW], "_ZN5Tizen4Base7Runtime6Thread4StopEv");
1416 if (tmpPtr == NULL || dlerror() != NULL) {
1417 perror("dlsym failed : Tizen::Base::Runtime::Thread::Stop");
1421 memcpy(&Stopp, &tmpPtr, sizeof(tmpPtr));
1425 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
1426 setProbePoint(&probeInfo);
1430 ret = (this->*Stopp)();
1432 if (postBlockBegin(blockresult)) {
1434 PREPARE_LOCAL_BUF();
1435 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
1436 API_ID_result_Thread__Stop_void_,
1438 PACK_COMMON_END(ret, ret, blockresult);
1439 PACK_THREAD((unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_STOP);
1447 result EventDrivenThread::Construct(long stackSize, ThreadPriority priority) {
1449 (Thread::*methodType)(long stackSize, ThreadPriority priority);
1450 static methodType Constructp = 0;
1452 probeInfo_t probeInfo;
1454 bool bfiltering = true;
1459 if(lib_handle[LIBOSP_APPFW] == NULL) {
1460 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
1461 if (lib_handle[LIBOSP_APPFW] == NULL) {
1462 perror("dlopen failed : libosp-appfw.so");
1466 tmpPtr = dlsym(lib_handle[LIBOSP_APPFW],
1467 "_ZN5Tizen4Base7Runtime17EventDrivenThread9ConstructElNS1_14ThreadPriorityE");
1468 if (tmpPtr == NULL || dlerror() != NULL) {
1469 perror("dlsym failed : Tizen::Base::Runtime::EventDrivenThread::Construct");
1473 memcpy(&Constructp, &tmpPtr, sizeof(tmpPtr));
1477 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
1478 setProbePoint(&probeInfo);
1482 ret = (this->*Constructp)(stackSize, priority);
1484 if (postBlockBegin(blockresult)) {
1486 PREPARE_LOCAL_BUF();
1487 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
1488 API_ID_result_EventDrivenThread__Construct_long_stackSize__ThreadPriority_priority_,
1489 "xd", stackSize, priority);
1490 PACK_COMMON_END(ret, ret, blockresult);
1491 PACK_THREAD((unsigned int) this, THREAD_OSPTHREAD_EVENTDRIVEN, THREAD_API_NEW);
1499 result EventDrivenThread::Construct(const Tizen::Base::String &name, long stackSize,
1500 ThreadPriority priority) {
1502 (Thread::*methodType)(const Tizen::Base::String &name, long stackSize,
1503 ThreadPriority priority);
1504 static methodType Constructp = 0;
1506 probeInfo_t probeInfo;
1508 bool bfiltering = true;
1514 if(lib_handle[LIBOSP_APPFW] == NULL) {
1515 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
1516 if (lib_handle[LIBOSP_APPFW] == NULL) {
1517 perror("dlopen failed : libosp-appfw.so");
1523 lib_handle[LIBOSP_APPFW],
1524 "_ZN5Tizen4Base7Runtime17EventDrivenThread9ConstructERKNS0_6StringElNS1_14ThreadPriorityE");
1526 if (tmpPtr == NULL || dlerror() != NULL) {
1527 perror("dlsym failed : Tizen::Base::Runtime::EventDrivenThread::Construct");
1531 memcpy(&Constructp, &tmpPtr, sizeof(tmpPtr));
1535 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
1536 setProbePoint(&probeInfo);
1540 ret = (this->*Constructp)(name, stackSize, priority);
1542 if (postBlockBegin(blockresult)) {
1544 WcharToChar(temp, name.GetPointer());
1546 PREPARE_LOCAL_BUF();
1547 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
1548 API_ID_result_EventDrivenThread__Construct_const_Tizen__Base__String__name__long_stackSize__ThreadPriority_priority_,
1549 "sx", temp, stackSize);
1550 PACK_COMMON_END(ret, ret, blockresult);
1551 PACK_THREAD((unsigned int) this, THREAD_OSPTHREAD_EVENTDRIVEN, THREAD_API_NEW);
1560 result EventDrivenThread::Quit() {
1561 typedef result (Thread::*methodType)(void);
1562 static methodType Quitp = 0;
1564 probeInfo_t probeInfo;
1566 bool bfiltering = true;
1571 if(lib_handle[LIBOSP_APPFW] == NULL) {
1572 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
1573 if (lib_handle[LIBOSP_APPFW] == NULL) {
1574 perror("dlopen failed : libosp-appfw.so");
1578 tmpPtr = dlsym(lib_handle[LIBOSP_APPFW], "_ZN5Tizen4Base7Runtime17EventDrivenThread4QuitEv");
1580 if (tmpPtr == NULL || dlerror() != NULL) {
1581 perror("dlsym failed : Tizen::Base::Runtime::EventThread::Quit");
1585 memcpy(&Quitp, &tmpPtr, sizeof(tmpPtr));
1589 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
1590 setProbePoint(&probeInfo);
1594 ret = (this->*Quitp)();
1596 if (postBlockBegin(blockresult)) {
1598 PREPARE_LOCAL_BUF();
1599 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
1600 API_ID_result_EventDrivenThread__Quit__,
1602 PACK_COMMON_END(ret, ret, blockresult);
1603 PACK_THREAD((unsigned int) this, THREAD_OSPTHREAD_EVENTDRIVEN, THREAD_API_STOP);