4 * Copyright (Thread::*c) 2000 - 2011 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>
13 * This library is free software; you can redistribute it and/or modify it under
14 * the terms of the GNU Lesser General Public License as published by the
15 * Free Software Foundation; either version 2.1 of the License, or (at your option)
18 * This library is distributed in the hope that it will be useful, but WITHOUT ANY
19 * WARRANTY; without even the implied warranty of MERCHANTABILITY or
20 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
21 * License for more details.
23 * You should have received a copy of the GNU Lesser General Public License
24 * along with this library; if not, write to the Free Software Foundation, Inc., 51
25 * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
33 #include <FBaseDataType.h>
34 #include <FBaseRtIRunnable.h>
38 #include "probeinfo.h"
43 static enum DaOptions _sopt = OPT_THREAD;
45 extern __thread unsigned int gProbeDepth;
51 THREAD_TYPE_WORKER = 0, /**< The worker thread mode */
52 THREAD_TYPE_EVENT_DRIVEN, /**< The event-driven thread mode */
54 // This enum value is for internal use only. Using this enum value can cause behavioral,
55 // security-related, and consistency-related issues in the application.
56 // The main thread mode
60 THREAD_PRIORITY_HIGH, /**< The high priority*/
61 THREAD_PRIORITY_MID, /**< The mid priority*/
63 /**< The low priority*/
68 const static unsigned long DEFAULT_STACK_SIZE = 64 * 1024;
70 static result Sleep(long milliSeconds);
71 static Thread* GetCurrentThread(void);
72 static result Yield(void);
73 static result Exit(int exitCode=0x00);
75 result Construct(ThreadType threadType, long stackSize, // deprecated
76 ThreadPriority priority = THREAD_PRIORITY_MID);
77 result Construct(long stackSize = DEFAULT_STACK_SIZE,
78 ThreadPriority priority = THREAD_PRIORITY_MID);
79 result Construct(const Tizen::Base::String &name, long stackSize =
80 DEFAULT_STACK_SIZE, ThreadPriority priority = THREAD_PRIORITY_MID);
81 result Construct(const Tizen::Base::String &name, ThreadType threadType, // deprecated
82 long stackSize = DEFAULT_STACK_SIZE, ThreadPriority priority =
84 result Construct(IRunnable &target, long stackSize = DEFAULT_STACK_SIZE,
85 ThreadPriority priority = THREAD_PRIORITY_MID);
86 result Construct(const Tizen::Base::String &name, IRunnable &target,
87 long stackSize = DEFAULT_STACK_SIZE, ThreadPriority priority =
89 result GetExitCode(int &exitCode) const;
90 const Tizen::Base::String & GetName(void) const;
92 // virtual bool OnStart(void); // deprecated
93 // virtual void OnStop(void); // deprecated
94 // virtual void OnUserEventReceivedN(RequestId requestId, // deprecated
95 // Tizen::Base::Collection::IList *pArgs);
96 // virtual Tizen::Base::Object * Run(void);
97 // virtual result SendUserEvent(RequestId requestId, // deprecated
98 // const Tizen::Base::Collection::IList *pArgs);
100 result Stop(void); // deprecated
103 // virtual ~Thread(void);
106 // Thread(const Thread& rhs);
107 // Thread& operator =(const Thread& rhs);
109 // friend class _ThreadImpl;
110 // class _ThreadImpl* __pThreadImpl;
115 // virtual result Stop(void);
117 // virtual result Finalize(void);
118 const Thread* GetThread(void) const;
120 static void* ThreadProc(void* pParam);
125 //_ThreadImpl::GetThread(void) const
127 // typedef const Thread*
128 // (_ThreadImpl::*methodType)(void) const;
129 // static methodType GetThreadp = 0;
130 // probeInfo_t probeInfo;
133 // bool bfiltering = false;
136 // if (!GetThreadp) {
137 // probeBlockStart();
138 // void* lib_handle = dlopen("libosp-appfw.so", RTLD_LAZY);
139 // if (lib_handle == NULL) {
140 // perror("dlopen failed : libosp-appfw.so");
143 // tmpPtr = dlsym(lib_handle, "_ZNK5Tizen4Base7Runtime11_ThreadImpl9GetThreadEv");
145 // if (tmpPtr == NULL || dlerror() != NULL) {
146 // perror("dlsym failed : Tizen::Base::Runtime::_ThreadImpl::GetThreadp");
150 // memcpy(&GetThreadp, &tmpPtr, sizeof(tmpPtr));
155 // if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
156 // setProbePoint(&probeInfo);
160 // const Thread* ret = (this->*GetThreadp)();
161 // result res = GetLastResult();
163 // if (postBlockBegin(blockresult)) {
166 // log.data[0] = '\0';
167 // log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", LC_THREAD,
168 // probeInfo.eventIndex, "_ThreadImpl::GetThread", probeInfo.currentTime,
169 // probeInfo.pID, probeInfo.tID);
172 // log.length += sprintf(log.data + log.length, "`,`,0x%x",ret);
173 // //PCAddr,errno,InternalCall,size,FD,FDType,FDApiType,FileSize,FilePath
174 // log.length += sprintf(log.data + log.length,
175 // "`,0`,%ld`,%d`,0`,%u`,0x%x`,%d`,%d`,`,", res,blockresult,
176 // (unsigned int)CALLER_ADDRESS, (unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_OTHER);
178 // log.length += sprintf(log.data + log.length, "`,\ncallstack_start`,");
179 // getBacktraceString(&log, 4096 - log.length - 17);
180 // log.length += sprintf(log.data + log.length, "`,callstack_end");
182 // printLog(&log, MSG_LOG);
188 class EventDrivenThread : public Thread {
190 result Construct(long stackSize = DEFAULT_STACK_SIZE,
191 ThreadPriority priority = THREAD_PRIORITY_MID);
192 result Construct(const Tizen::Base::String &name, long stackSize =
193 DEFAULT_STACK_SIZE, ThreadPriority priority = THREAD_PRIORITY_MID);
195 virtual result Quit();
196 // virtual bool OnStart(void);
197 // virtual void OnStop(void);
198 // virtual void OnUserEventReceivedN(RequestId requestId,
199 // Tizen::Base::Collection::IList *pArgs);
200 // virtual Tizen::Base::Object * Run(void);
201 // virtual result SendUserEvent(RequestId requestId,
202 // const Tizen::Base::Collection::IList *pArgs);
204 // EventDrivenThread(void);
205 // virtual ~EventDrivenThread(void);
208 // EventDrivenThread(const EventDrivenThread& rhs);
209 // EventDrivenThread& operator = (const EventDrivenThread& rhs);
211 // class _EventDrivenThreadImpl* __pEventDrivenThreadImpl;
212 // friend class _EventDrivenThreadImpl;
217 _ThreadImpl::ThreadProc(void* params) {
219 (*methodType)(void*);
220 static methodType ThreadProcp = 0;
221 probeInfo_t probeInfo;
224 bool bfiltering = false;
229 if(lib_handle[LIBOSP_APPFW] == NULL) {
230 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
231 if (lib_handle[LIBOSP_APPFW] == NULL) {
232 perror("dlopen failed : libosp-appfw.so");
236 tmpPtr = dlsym(lib_handle[LIBOSP_APPFW], "_ZN5Tizen4Base7Runtime11_ThreadImpl10ThreadProcEPv");
238 if (tmpPtr == NULL || dlerror() != NULL) {
239 perror("dlsym failed : Tizen::Base::Runtime::_ThreadImpl::ThreadProc");
243 memcpy(&ThreadProcp, &tmpPtr, sizeof(tmpPtr));
248 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
249 setProbePoint(&probeInfo);
253 log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", LC_THREAD,
254 probeInfo.eventIndex, "_ThreadImpl::ThreadProc", probeInfo.currentTime,
255 probeInfo.pID, probeInfo.tID);
257 _ThreadImpl* pSelf =(_ThreadImpl*)params;
258 const Thread* pThread = NULL;
260 pThread = pSelf->GetThread();
263 log.length += sprintf(log.data + log.length, "`,0x%x`,",(unsigned int)pSelf);
264 //PCAddr,errno,InternalCall,CallerPCAddr,PThreadID,OspThreadID,ThreadType,ApiType
265 log.length += sprintf(log.data + log.length,
266 "`,0`,0`,%d`,%u`,`,0x%x`,%d`,%d", blockresult,
267 (unsigned int)CALLER_ADDRESS, (unsigned int)pThread, THREAD_OSPTHREAD_WORKER, THREAD_API_INTERNAL_START);
269 log.length += sprintf(log.data + log.length, "`,\ncallstack_start`,");
270 log.length += sprintf(log.data + log.length, "`,callstack_end");
272 printLog(&log, MSG_LOG);
275 PACK_COMMON_BEGIN(MSG_PROBE_THREAD, LC_THREAD, "p", params);
276 PACK_COMMON_END((unsigned int)pSelf, 0, blockresult);
277 PACK_THREAD((unsigned int)pThread, THREAD_OSPTHREAD_WORKER, THREAD_API_INTERNAL_START);
282 // all probe should be reachable inside thread start_routine (user implemented Thread::Run)
284 TRACE_STATE_UNSET(TS_ENTER_PROBE_BLOCK);
285 (ThreadProcp)(params);
286 TRACE_STATE_SET(TS_ENTER_PROBE_BLOCK);
289 if (postBlockBegin(blockresult)) {
290 setProbePoint(&probeInfo);
294 log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", LC_THREAD,
295 probeInfo.eventIndex, "_ThreadImpl::ThreadProc", probeInfo.currentTime,
296 probeInfo.pID, probeInfo.tID);
298 _ThreadImpl* pSelf =(_ThreadImpl*)params;
299 const Thread* pThread = NULL;
301 pThread = pSelf->GetThread();
304 log.length += sprintf(log.data + log.length, "`,0x%x`,",(unsigned int)pSelf);
305 //PCAddr,errno,InternalCall,CallerPCAddr,PThreadID,OspThreadID,ThreadType,ApiType
306 log.length += sprintf(log.data + log.length,
307 "`,0`,0`,%d`,%u`,`,0x%x`,%d`,%d", blockresult,
308 (unsigned int)CALLER_ADDRESS, (unsigned int)pThread, THREAD_OSPTHREAD_WORKER, THREAD_API_INTERNAL_STOP);
310 log.length += sprintf(log.data + log.length, "`,\ncallstack_start`,");
311 log.length += sprintf(log.data + log.length, "`,callstack_end");
313 printLog(&log, MSG_LOG);
316 PACK_COMMON_BEGIN(MSG_PROBE_THREAD, LC_THREAD, "p", params);
317 PACK_COMMON_END((unsigned int)pSelf, 0, blockresult);
318 PACK_THREAD((unsigned int)pThread, THREAD_OSPTHREAD_WORKER, THREAD_API_INTERNAL_STOP);
325 //result _ThreadImpl::Stop(void) {
327 // (_ThreadImpl::*methodType)(void);
328 // static methodType Stopp = 0;
329 // probeInfo_t probeInfo;
332 // bool bfiltering = true;
336 // probeBlockStart();
337 // void* lib_handle = dlopen("libosp-appfw.so", RTLD_LAZY);
338 // if (lib_handle == NULL) {
339 // perror("dlopen failed : libosp-appfw.so");
342 // tmpPtr = dlsym(lib_handle, "_ZN5Tizen4Base7Runtime11_ThreadImpl4StopEv");
344 // if (tmpPtr == NULL || dlerror() != NULL) {
345 // perror("dlsym failed : Tizen::Base::Runtime::_ThreadImpl::Stopp");
349 // memcpy(&Stopp, &tmpPtr, sizeof(tmpPtr));
354 // if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
355 // setProbePoint(&probeInfo);
359 // result ret= (this->*Stopp)();
361 // if (postBlockBegin(blockresult)) {
364 // log.data[0] = '\0';
365 // log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", LC_THREAD,
366 // probeInfo.eventIndex, "_ThreadImpl::Stop", probeInfo.currentTime,
367 // probeInfo.pID, probeInfo.tID);
369 // log.length += sprintf(log.data + log.length, "`,`,%ld", ret);
370 // //PCAddr,errno,InternalCall,size,FD,FDType,FDApiType,FileSize,FilePath
371 // log.length += sprintf(log.data + log.length,
372 // "`,0`,%ld`,%d`,0`,%u`,0x%x`,%d`,%d`,`,", ret, blockresult,
373 // (unsigned int)CALLER_ADDRESS, (unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_CLOSE);
375 // log.length += sprintf(log.data + log.length, "`,\ncallstack_start`,");
376 // getBacktraceString(&log, 4096 - log.length - 17);
377 // log.length += sprintf(log.data + log.length, "`,callstack_end");
379 // printLog(&log, MSG_LOG);
385 //result _ThreadImpl::Finalize(void) {
387 // (_ThreadImpl::*methodType)(void);
388 // static methodType Finalizep = 0;
389 // probeInfo_t probeInfo;
392 // bool bfiltering = false;
396 // probeBlockStart();
397 // void* lib_handle = dlopen("libosp-appfw.so", RTLD_LAZY);
398 // if (lib_handle == NULL) {
399 // perror("dlopen failed : libosp-appfw.so");
402 // tmpPtr = dlsym(lib_handle, "_ZN5Tizen4Base7Runtime11_ThreadImpl8FinalizeEv");
404 // if (tmpPtr == NULL || dlerror() != NULL) {
405 // perror("dlsym failed : Tizen::Base::Runtime::_ThreadImpl::Finalizep");
409 // memcpy(&Finalizep, &tmpPtr, sizeof(tmpPtr));
413 // if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
414 // setProbePoint(&probeInfo);
418 // result ret= (this->*Finalizep)();
420 // if (postBlockBegin(blockresult)) {
423 // log.data[0] = '\0';
424 // log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", LC_THREAD,
425 // probeInfo.eventIndex, "_ThreadImpl::Finalize", probeInfo.currentTime,
426 // probeInfo.pID, probeInfo.tID);
428 // log.length += sprintf(log.data + log.length, "`,`,%ld", ret);
429 // //PCAddr,errno,InternalCall,size,FD,FDType,FDApiType,FileSize,FilePath
430 // log.length += sprintf(log.data + log.length,
431 // "`,0`,%ld`,%d`,0`,%u`,0x%x`,%d`,%d`,`,", ret, blockresult,
432 // (unsigned int)CALLER_ADDRESS, (unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_CLOSE);
434 // log.length += sprintf(log.data + log.length, "`,\ncallstack_start`,");
435 // getBacktraceString(&log, 4096 - log.length - 17);
436 // log.length += sprintf(log.data + log.length, "`,callstack_end");
438 // printLog(&log, MSG_LOG);
443 //Thread::Thread(void) {
444 // typedef void (Thread::*methodType)();
445 // static methodType Threadp = 0;
446 // probeInfo_t probeInfo;
449 // bool bfiltering = true;
453 // probeBlockStart();
455 // tmpPtr = dlsym(RTLD_NEXT, "_ZN5Tizen4Base7Runtime6ThreadC1Ev");
457 // if (tmpPtr == NULL || dlerror() != NULL) {
460 // log.data[0] = '\0';
461 // log.length = sprintf(log.data,"dlsym failed : Tizen::Base::Runtime::Thread::Thread");
462 // perror("dlsym failed : Tizen::Base::Runtime::Thread::Thread");
463 // printLog(&log, MSG_MSG);
467 // memcpy(&Threadp, &tmpPtr, sizeof(tmpPtr));
471 // if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
472 // setProbePoint(&probeInfo);
476 // (this->*Threadp)();
478 // if (postBlockBegin(blockresult)) {
481 // log.data[0] = '\0';
482 // log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", LC_THREAD,
483 // probeInfo.eventIndex, "Thread::Thread", probeInfo.currentTime,
484 // probeInfo.pID, probeInfo.tID);
486 // log.length += sprintf(log.data + log.length, "`,`,");
487 // //PCAddr,errno,InternalCall,size,FD,FDType,FDApiType,FileSize,FilePath
489 // log.length += sprintf(log.data + log.length,
490 // "`,0`,0`,%d`,0`,0x%x`,%d`,%d`,`,", blockresult,
491 // (unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_OPEN);
493 // log.length += sprintf(log.data + log.length, "`,\ncallstack_start`,");
494 // getBacktraceString(&log, 4096 - log.length - 17);
495 // log.length += sprintf(log.data + log.length, "`,callstack_end");
497 // printLog(&log, MSG_LOG);
502 //Thread::~Thread(void) {
503 // typedef void (Thread::*methodType)();
504 // static methodType ThreadDp = 0;
505 // probeInfo_t probeInfo;
508 // bool bfiltering = true;
512 // probeBlockStart();
514 // void* lib_handle = dlopen("libosp-appfw.so", RTLD_LAZY);
515 // if (lib_handle == NULL) {
516 // perror("dlopen failed : libosp-appfw.so");
519 // tmpPtr = dlsym(lib_handle, "_ZN5Tizen4Base7Runtime6ThreadD0Ev");
521 // if (tmpPtr == NULL || dlerror() != NULL) {
522 // perror("dlsym failed : Tizen::Base::Runtime::Thread::~Thread");
526 // memcpy(&ThreadDp, &tmpPtr, sizeof(tmpPtr));
530 // if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
531 // setProbePoint(&probeInfo);
535 // (this->*ThreadDp)();
537 // if (postBlockBegin(blockresult)) {
540 // log.data[0] = '\0';
541 // log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", LC_THREAD,
542 // probeInfo.eventIndex, "Thread::~Thread", probeInfo.currentTime,
543 // probeInfo.pID, probeInfo.tID);
545 // log.length += sprintf(log.data + log.length, "`,`,");
546 // //PCAddr,errno,InternalCall,size,FD,FDType,FDApiType,FileSize,FilePath
548 // log.length += sprintf(log.data + log.length,
549 // "`,0`,0`,%d`,0`,0x%x`,%d`,%d`,`,", blockresult,
550 // (unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_CLOSE);
552 // log.length += sprintf(log.data + log.length, "`,\ncallstack_start`,");
553 // getBacktraceString(&log, 4096 - log.length - 17);
554 // log.length += sprintf(log.data + log.length, "`,callstack_end");
556 // printLog(&log, MSG_LOG);
560 result Thread::Sleep(long milliSeconds) {
563 static methodType Sleepp = 0;
564 probeInfo_t probeInfo;
567 bool bfiltering = true;
572 if(lib_handle[LIBOSP_APPFW] == NULL) {
573 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
574 if (lib_handle[LIBOSP_APPFW] == NULL) {
575 perror("dlopen failed : libosp-appfw.so");
579 tmpPtr = dlsym(lib_handle[LIBOSP_APPFW], "_ZN5Tizen4Base7Runtime6Thread5SleepEl");
581 if (tmpPtr == NULL || dlerror() != NULL) {
582 perror("dlsym failed : Tizen::Base::Runtime::Thread::Sleep");
586 memcpy(&Sleepp, &tmpPtr, sizeof(tmpPtr));
591 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
592 setProbePoint(&probeInfo);
596 log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", LC_THREAD,
597 probeInfo.eventIndex, "Thread::Sleep", probeInfo.currentTime,
598 probeInfo.pID, probeInfo.tID);
600 Thread *currentThread;
601 currentThread = GetCurrentThread();
604 log.length += sprintf(log.data + log.length, "`,%ld`,",milliSeconds);
605 //PCAddr,errno,InternalCall,CallerPCAddr,PThreadID,OspThreadID,ThreadType,ApiType
606 log.length += sprintf(log.data + log.length,
607 "`,0`,0`,%d`,%u`,`,0x%x`,%d`,%d",blockresult,
608 (unsigned int)CALLER_ADDRESS, (unsigned int)currentThread, THREAD_OSPTHREAD_WORKER, THREAD_API_WAIT_START);
610 log.length += sprintf(log.data + log.length, "`,\ncallstack_start`,");
611 log.length += sprintf(log.data + log.length, "`,callstack_end");
613 printLog(&log, MSG_LOG);
616 PACK_COMMON_BEGIN(MSG_PROBE_THREAD, LC_THREAD, "x", milliSeconds);
617 PACK_COMMON_END(0, 0, blockresult);
618 PACK_THREAD((unsigned int)currentThread, THREAD_OSPTHREAD_WORKER, THREAD_API_WAIT_START);
624 result ret = (Sleepp)(milliSeconds);
626 if (postBlockBegin(blockresult)) {
627 setProbePoint(&probeInfo);
631 log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", LC_THREAD,
632 probeInfo.eventIndex, "Thread::Sleep", probeInfo.currentTime,
633 probeInfo.pID, probeInfo.tID);
635 Thread *currentThread;
636 currentThread = GetCurrentThread();
639 log.length += sprintf(log.data + log.length, "`,%ld`,%ld",milliSeconds,ret);
640 //PCAddr,errno,InternalCall,CallerPCAddr,PThreadID,OspThreadID,ThreadType,ApiType
641 log.length += sprintf(log.data + log.length,
642 "`,0`,%lu`,%d`,%u`,`,0x%x`,%d`,%d", ret,blockresult,
643 (unsigned int)CALLER_ADDRESS, (unsigned int)currentThread, THREAD_OSPTHREAD_WORKER, THREAD_API_WAIT_END);
645 log.length += sprintf(log.data + log.length, "`,\ncallstack_start`,");
646 getBacktraceString(&log, 4096 - log.length - 17);
647 log.length += sprintf(log.data + log.length, "`,callstack_end");
649 printLog(&log, MSG_LOG);
652 PACK_COMMON_BEGIN(MSG_PROBE_THREAD, LC_THREAD, "x", milliSeconds);
653 PACK_COMMON_END(ret, ret, blockresult);
654 PACK_THREAD((unsigned int)currentThread, THREAD_OSPTHREAD_WORKER, THREAD_API_WAIT_END);
662 Thread* Thread::GetCurrentThread(void) {
665 static methodType GetCurrentThreadp = 0;
666 probeInfo_t probeInfo;
669 bool bfiltering = true;
672 if (!GetCurrentThreadp) {
674 if(lib_handle[LIBOSP_APPFW] == NULL) {
675 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
676 if (lib_handle[LIBOSP_APPFW] == NULL) {
677 perror("dlopen failed : libosp-appfw.so");
681 tmpPtr = dlsym(lib_handle[LIBOSP_APPFW], "_ZN5Tizen4Base7Runtime6Thread16GetCurrentThreadEv");
683 if (tmpPtr == NULL || dlerror() != NULL) {
684 perror("dlsym failed : Tizen::Base::Runtime::Thread::GetCurrentThread");
688 memcpy(&GetCurrentThreadp, &tmpPtr, sizeof(tmpPtr));
693 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
694 setProbePoint(&probeInfo);
698 Thread *currentThread = (GetCurrentThreadp)();
699 result res = GetLastResult();
701 if (postBlockBegin(blockresult)) {
705 log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", LC_THREAD,
706 probeInfo.eventIndex, "Thread::GetCurrentThread", probeInfo.currentTime,
707 probeInfo.pID, probeInfo.tID);
710 log.length += sprintf(log.data + log.length, "`,`,0x%x",(unsigned int)currentThread);
711 //PCAddr,errno,InternalCall,CallerPCAddr,PThreadID,OspThreadID,ThreadType,ApiType
712 log.length += sprintf(log.data + log.length,
713 "`,0`,%lu`,%d`,%u`,`,0x%x`,%d`,%d", res,blockresult,
714 (unsigned int)CALLER_ADDRESS, (unsigned int)currentThread, THREAD_OSPTHREAD_WORKER, THREAD_API_OTHER);
716 log.length += sprintf(log.data + log.length, "`,\ncallstack_start`,");
717 getBacktraceString(&log, 4096 - log.length - 17);
718 log.length += sprintf(log.data + log.length, "`,callstack_end");
720 printLog(&log, MSG_LOG);
723 PACK_COMMON_BEGIN(MSG_PROBE_THREAD, LC_THREAD, "", 0);
724 PACK_COMMON_END((unsigned int)currentThread, res, blockresult);
725 PACK_THREAD((unsigned int)currentThread, THREAD_OSPTHREAD_WORKER, THREAD_API_OTHER);
730 return currentThread;
733 result Thread::Yield(void) {
736 static methodType Yieldp = 0;
737 probeInfo_t probeInfo;
740 bool bfiltering = true;
745 if(lib_handle[LIBOSP_APPFW] == NULL) {
746 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
747 if (lib_handle[LIBOSP_APPFW] == NULL) {
748 perror("dlopen failed : libosp-appfw.so");
752 tmpPtr = dlsym(lib_handle[LIBOSP_APPFW], "_ZN5Tizen4Base7Runtime6Thread5YieldEv");
754 if (tmpPtr == NULL || dlerror() != NULL) {
755 perror("dlsym failed : Tizen::Base::Runtime::Thread::Yield");
759 memcpy(&Yieldp, &tmpPtr, sizeof(tmpPtr));
764 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
765 setProbePoint(&probeInfo);
769 result ret = (Yieldp)();
771 if (postBlockBegin(blockresult)) {
775 log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", LC_THREAD,
776 probeInfo.eventIndex, "Thread::Yield", probeInfo.currentTime,
777 probeInfo.pID, probeInfo.tID);
779 Thread *currentThread;
780 currentThread = GetCurrentThread();
783 log.length += sprintf(log.data + log.length, "`,`,%ld",ret);
784 //PCAddr,errno,InternalCall,CallerPCAddr,PThreadID,OspThreadID,ThreadType,ApiType
785 log.length += sprintf(log.data + log.length,
786 "`,0`,%lu`,%d`,%u`,`,0x%x`,%d`,%d", ret,blockresult,
787 (unsigned int)CALLER_ADDRESS, (unsigned int)currentThread, THREAD_OSPTHREAD_WORKER, THREAD_API_OTHER);
789 log.length += sprintf(log.data + log.length, "`,\ncallstack_start`,");
790 getBacktraceString(&log, 4096 - log.length - 17);
791 log.length += sprintf(log.data + log.length, "`,callstack_end");
793 printLog(&log, MSG_LOG);
796 PACK_COMMON_BEGIN(MSG_PROBE_THREAD, LC_THREAD, "", 0);
797 PACK_COMMON_END(ret, ret, blockresult);
798 PACK_THREAD((unsigned int)currentThread, THREAD_OSPTHREAD_WORKER, THREAD_API_OTHER);
806 result Thread::Exit(int exitCode) {
808 (*methodType)(int exitCode);
809 static methodType Exitp = 0;
810 probeInfo_t probeInfo;
813 bool bfiltering = true;
818 if(lib_handle[LIBOSP_APPFW] == NULL) {
819 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
820 if (lib_handle[LIBOSP_APPFW] == NULL) {
821 perror("dlopen failed : libosp-appfw.so");
825 tmpPtr = dlsym(lib_handle[LIBOSP_APPFW], "_ZN5Tizen4Base7Runtime6Thread4ExitEi");
827 if (tmpPtr == NULL || dlerror() != NULL) {
828 perror("dlsym failed : Tizen::Base::Runtime::Thread::Exit");
832 memcpy(&Exitp, &tmpPtr, sizeof(tmpPtr));
837 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
838 setProbePoint(&probeInfo);
842 log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", LC_THREAD,
843 probeInfo.eventIndex, "Thread::Exit", probeInfo.currentTime,
844 probeInfo.pID, probeInfo.tID);
846 Thread *currentThread;
847 currentThread = GetCurrentThread();
850 log.length += sprintf(log.data + log.length, "`,%d`,",exitCode);
851 //PCAddr,errno,InternalCall,CallerPCAddr,PThreadID,OspThreadID,ThreadType,ApiType
852 log.length += sprintf(log.data + log.length,
853 "`,0`,0`,%d`,%u`,`,0x%x`,%d`,%d",blockresult,
854 (unsigned int)CALLER_ADDRESS, (unsigned int)currentThread, THREAD_OSPTHREAD_WORKER, THREAD_API_EXIT);
856 log.length += sprintf(log.data + log.length, "`,\ncallstack_start`,");
857 getBacktraceString(&log, 4096 - log.length - 17);
858 log.length += sprintf(log.data + log.length, "`,callstack_end");
860 printLog(&log, MSG_LOG);
863 PACK_COMMON_BEGIN(MSG_PROBE_THREAD, LC_THREAD, "d", exitCode);
864 PACK_COMMON_END(0, 0, blockresult);
865 PACK_THREAD((unsigned int)currentThread, THREAD_OSPTHREAD_WORKER, THREAD_API_EXIT);
871 result ret = (Exitp)(exitCode);
876 result Thread::Construct(ThreadType threadType, long stackSize,
877 ThreadPriority priority) {
879 (Thread::*methodType)(ThreadType threadType, long stackSize,
880 ThreadPriority priority);
881 static methodType Constructp = 0;
883 probeInfo_t probeInfo;
886 bool bfiltering = true;
891 if(lib_handle[LIBOSP_APPFW] == NULL) {
892 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
893 if (lib_handle[LIBOSP_APPFW] == NULL) {
894 perror("dlopen failed : libosp-appfw.so");
900 lib_handle[LIBOSP_APPFW],
901 "_ZN5Tizen4Base7Runtime6Thread9ConstructENS1_10ThreadTypeElNS1_14ThreadPriorityE");
903 if (tmpPtr == NULL || dlerror() != NULL) {
904 perror("dlsym failed : Tizen::Base::Runtime::Thread::Construct");
908 memcpy(&Constructp, &tmpPtr, sizeof(tmpPtr));
912 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
913 setProbePoint(&probeInfo);
917 ret = (this->*Constructp)(threadType, stackSize, priority);
919 if (postBlockBegin(blockresult)) {
923 log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", LC_THREAD,
924 probeInfo.eventIndex, "Thread::Construct",
925 probeInfo.currentTime, probeInfo.pID, probeInfo.tID);
927 log.length += sprintf(log.data + log.length, "`,%d, %ld, %d`,%ld",
928 threadType, stackSize, priority, ret);
929 //PCAddr,errno,InternalCall,CallerPCAddr,PThreadID,OspThreadID,ThreadType,ApiType
930 log.length += sprintf(log.data + log.length,
931 "`,0`,%lu`,%d`,%u`,`,0x%x`,%d`,%d", ret, blockresult,
932 (unsigned int)CALLER_ADDRESS, (unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_NEW);
934 log.length += sprintf(log.data + log.length, "`,\ncallstack_start`,");
935 getBacktraceString(&log, 4096 - log.length - 17);
936 log.length += sprintf(log.data + log.length, "`,callstack_end");
938 printLog(&log, MSG_LOG);
941 PACK_COMMON_BEGIN(MSG_PROBE_THREAD, LC_THREAD, "dxd", threadType, stackSize, priority);
942 PACK_COMMON_END(ret, ret, blockresult);
943 PACK_THREAD((unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_NEW);
950 result Thread::Construct(long stackSize, ThreadPriority priority) {
952 (Thread::*methodType)(long stackSize, ThreadPriority priority);
953 static methodType Constructp = 0;
955 probeInfo_t probeInfo;
958 bool bfiltering = true;
963 if(lib_handle[LIBOSP_APPFW] == NULL) {
964 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
965 if (lib_handle[LIBOSP_APPFW] == NULL) {
966 perror("dlopen failed : libosp-appfw.so");
970 tmpPtr = dlsym(lib_handle[LIBOSP_APPFW],
971 "_ZN5Tizen4Base7Runtime6Thread9ConstructElNS1_14ThreadPriorityE");
972 if (tmpPtr == NULL || dlerror() != NULL) {
973 perror("dlsym failed : Tizen::Base::Runtime::Thread::Construct");
977 memcpy(&Constructp, &tmpPtr, sizeof(tmpPtr));
981 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
982 setProbePoint(&probeInfo);
986 ret = (this->*Constructp)(stackSize, priority);
988 if (postBlockBegin(blockresult)) {
992 log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", LC_THREAD,
993 probeInfo.eventIndex, "Thread::Construct",
994 probeInfo.currentTime, probeInfo.pID, probeInfo.tID);
996 log.length += sprintf(log.data + log.length, "`,%ld, %d`,%ld",
997 stackSize, priority, ret);
998 //PCAddr,errno,InternalCall,CallerPCAddr,PThreadID,OspThreadID,ThreadType,ApiType
999 log.length += sprintf(log.data + log.length,
1000 "`,0`,%lu`,%d`,%u`,`,0x%x`,%d`,%d", ret, blockresult,
1001 (unsigned int)CALLER_ADDRESS, (unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_NEW);
1003 log.length += sprintf(log.data + log.length, "`,\ncallstack_start`,");
1004 getBacktraceString(&log, 4096 - log.length - 17);
1005 log.length += sprintf(log.data + log.length, "`,callstack_end");
1007 printLog(&log, MSG_LOG);
1009 PREPARE_LOCAL_BUF();
1010 PACK_COMMON_BEGIN(MSG_PROBE_THREAD, LC_THREAD, "xd", stackSize, priority);
1011 PACK_COMMON_END(ret, ret, blockresult);
1012 PACK_THREAD((unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_NEW);
1019 result Thread::Construct(const Tizen::Base::String &name, long stackSize,
1020 ThreadPriority priority) {
1022 (Thread::*methodType)(const Tizen::Base::String &name, long stackSize,
1023 ThreadPriority priority);
1024 static methodType Constructp = 0;
1026 probeInfo_t probeInfo;
1029 bool bfiltering = true;
1035 if(lib_handle[LIBOSP_APPFW] == NULL) {
1036 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
1037 if (lib_handle[LIBOSP_APPFW] == NULL) {
1038 perror("dlopen failed : libosp-appfw.so");
1044 lib_handle[LIBOSP_APPFW],
1045 "_ZN5Tizen4Base7Runtime6Thread9ConstructERKNS0_6StringElNS1_14ThreadPriorityE");
1047 if (tmpPtr == NULL || dlerror() != NULL) {
1048 perror("dlsym failed : Tizen::Base::Runtime::Thread::Construct");
1052 memcpy(&Constructp, &tmpPtr, sizeof(tmpPtr));
1056 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
1057 setProbePoint(&probeInfo);
1061 ret = (this->*Constructp)(name, stackSize, priority);
1063 if (postBlockBegin(blockresult)) {
1067 log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", LC_THREAD,
1068 probeInfo.eventIndex, "Thread::Construct",
1069 probeInfo.currentTime, probeInfo.pID, probeInfo.tID);
1071 WcharToChar(temp, name.GetPointer());
1072 log.length += sprintf(log.data + log.length, "`,%s, %ld, %d`,%ld", temp,
1073 stackSize, priority, ret);
1074 //PCAddr,errno,InternalCall,CallerPCAddr,PThreadID,OspThreadID,ThreadType,ApiType
1075 log.length += sprintf(log.data + log.length,
1076 "`,0`,%lu`,%d`,%u`,`,0x%x`,%d`,%d", ret, blockresult,
1077 (unsigned int)CALLER_ADDRESS, (unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_NEW);
1079 log.length += sprintf(log.data + log.length, "`,\ncallstack_start`,");
1080 getBacktraceString(&log, 4096 - log.length - 17);
1081 log.length += sprintf(log.data + log.length, "`,callstack_end");
1083 printLog(&log, MSG_LOG);
1085 PREPARE_LOCAL_BUF();
1086 PACK_COMMON_BEGIN(MSG_PROBE_THREAD, LC_THREAD, "sxd", temp, stackSize, priority);
1087 PACK_COMMON_END(ret, ret, blockresult);
1088 PACK_THREAD((unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_NEW);
1095 result Thread::Construct(const Tizen::Base::String &name, ThreadType threadType,
1096 long stackSize, ThreadPriority priority) {
1098 (Thread::*methodType)(const Tizen::Base::String &name, ThreadType threadType,
1099 long stackSize, ThreadPriority priority);
1100 static methodType Constructp = 0;
1102 probeInfo_t probeInfo;
1105 bool bfiltering = true;
1111 if(lib_handle[LIBOSP_APPFW] == NULL) {
1112 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
1113 if (lib_handle[LIBOSP_APPFW] == NULL) {
1114 perror("dlopen failed : libosp-appfw.so");
1121 lib_handle[LIBOSP_APPFW],
1122 "_ZN5Tizen4Base7Runtime6Thread9ConstructERKNS0_6StringENS1_10ThreadTypeElNS1_14ThreadPriorityE");
1123 if (tmpPtr == NULL || dlerror() != NULL) {
1124 perror("dlsym failed : Tizen::Base::Runtime::Thread::Construct");
1128 memcpy(&Constructp, &tmpPtr, sizeof(tmpPtr));
1132 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
1133 setProbePoint(&probeInfo);
1137 ret = (this->*Constructp)(name, threadType, stackSize, priority);
1139 if (postBlockBegin(blockresult)) {
1143 log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", LC_THREAD,
1144 probeInfo.eventIndex, "Thread::Construct",
1145 probeInfo.currentTime, probeInfo.pID, probeInfo.tID);
1147 WcharToChar(temp, name.GetPointer());
1148 log.length += sprintf(log.data + log.length, "`,%s, %d, %ld, %d`,%ld",
1149 temp, threadType, stackSize, priority, ret);
1150 //PCAddr,errno,InternalCall,CallerPCAddr,PThreadID,OspThreadID,ThreadType,ApiType
1151 log.length += sprintf(log.data + log.length,
1152 "`,0`,%lu`,%d`,%u`,`,0x%x`,%d`,%d", ret, blockresult,
1153 (unsigned int)CALLER_ADDRESS, (unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_NEW);
1155 log.length += sprintf(log.data + log.length, "`,\ncallstack_start`,");
1156 getBacktraceString(&log, 4096 - log.length - 17);
1157 log.length += sprintf(log.data + log.length, "`,callstack_end");
1159 printLog(&log, MSG_LOG);
1161 PREPARE_LOCAL_BUF();
1162 PACK_COMMON_BEGIN(MSG_PROBE_THREAD, LC_THREAD, "sdxd", temp, threadType, stackSize, priority);
1163 PACK_COMMON_END(ret, ret, blockresult);
1164 PACK_THREAD((unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_NEW);
1171 result Thread::Construct(IRunnable &target, long stackSize,
1172 ThreadPriority priority) {
1174 (Thread::*methodType)(IRunnable &target, long stackSize,
1175 ThreadPriority priority);
1176 static methodType Constructp = 0;
1178 probeInfo_t probeInfo;
1181 bool bfiltering = true;
1186 if(lib_handle[LIBOSP_APPFW] == NULL) {
1187 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
1188 if (lib_handle[LIBOSP_APPFW] == NULL) {
1189 perror("dlopen failed : libosp-appfw.so");
1195 lib_handle[LIBOSP_APPFW],
1196 "_ZN5Tizen4Base7Runtime6Thread9ConstructERNS1_9IRunnableElNS1_14ThreadPriorityE");
1198 if (tmpPtr == NULL || dlerror() != NULL) {
1199 perror("dlsym failed : Tizen::Base::Runtime::Thread::Construct");
1203 memcpy(&Constructp, &tmpPtr, sizeof(tmpPtr));
1207 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
1208 setProbePoint(&probeInfo);
1212 ret = (this->*Constructp)(target, stackSize, priority);
1214 if (postBlockBegin(blockresult)) {
1218 log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", LC_THREAD,
1219 probeInfo.eventIndex, "Thread::Construct",
1220 probeInfo.currentTime, probeInfo.pID, probeInfo.tID);
1222 log.length += sprintf(log.data + log.length, "`,0x%x, %ld, %d`,%ld",
1223 (unsigned int) &target, stackSize, priority, ret);
1224 //PCAddr,errno,InternalCall,CallerPCAddr,PThreadID,OspThreadID,ThreadType,ApiType
1225 log.length += sprintf(log.data + log.length,
1226 "`,0`,%lu`,%d`,%u`,`,0x%x`,%d`,%d", ret, blockresult,
1227 (unsigned int)CALLER_ADDRESS, (unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_NEW);
1229 log.length += sprintf(log.data + log.length, "`,\ncallstack_start`,");
1230 getBacktraceString(&log, 4096 - log.length - 17);
1231 log.length += sprintf(log.data + log.length, "`,callstack_end");
1233 printLog(&log, MSG_LOG);
1235 PREPARE_LOCAL_BUF();
1236 PACK_COMMON_BEGIN(MSG_PROBE_THREAD, LC_THREAD, "xxd", (unsigned int) &target, stackSize, priority);
1237 PACK_COMMON_END(ret, ret, blockresult);
1238 PACK_THREAD((unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_NEW);
1245 result Thread::Construct(const Tizen::Base::String &name, IRunnable &target,
1246 long stackSize, ThreadPriority priority) {
1248 (Thread::*methodType)(const Tizen::Base::String &name, IRunnable &target,
1249 long stackSize, ThreadPriority priority);
1250 static methodType Constructp = 0;
1252 probeInfo_t probeInfo;
1255 bool bfiltering = true;
1261 if(lib_handle[LIBOSP_APPFW] == NULL) {
1262 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
1263 if (lib_handle[LIBOSP_APPFW] == NULL) {
1264 perror("dlopen failed : libosp-appfw.so");
1270 lib_handle[LIBOSP_APPFW],
1271 "_ZN5Tizen4Base7Runtime6Thread9ConstructERKNS0_6StringERNS1_9IRunnableElNS1_14ThreadPriorityE");
1273 if (tmpPtr == NULL || dlerror() != NULL) {
1274 perror("dlsym failed : Tizen::Base::Runtime::Thread::Construct");
1278 memcpy(&Constructp, &tmpPtr, sizeof(tmpPtr));
1282 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
1283 setProbePoint(&probeInfo);
1287 ret = (this->*Constructp)(name, target, stackSize, priority);
1289 if (postBlockBegin(blockresult)) {
1293 log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", LC_THREAD,
1294 probeInfo.eventIndex, "Thread::Construct",
1295 probeInfo.currentTime, probeInfo.pID, probeInfo.tID);
1297 WcharToChar(temp, name.GetPointer());
1298 log.length += sprintf(log.data + log.length, "`,%s, 0x%x, %ld, %d`,%ld",
1299 temp, (unsigned int) &target, stackSize, priority, ret);
1300 //PCAddr,errno,InternalCall,CallerPCAddr,PThreadID,OspThreadID,ThreadType,ApiType
1301 log.length += sprintf(log.data + log.length,
1302 "`,0`,%lu`,%d`,%u`,`,0x%x`,%d`,%d", ret, blockresult,
1303 (unsigned int)CALLER_ADDRESS, (unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_NEW);
1305 log.length += sprintf(log.data + log.length, "`,\ncallstack_start`,");
1306 getBacktraceString(&log, 4096 - log.length - 17);
1307 log.length += sprintf(log.data + log.length, "`,callstack_end");
1309 printLog(&log, MSG_LOG);
1311 PREPARE_LOCAL_BUF();
1312 PACK_COMMON_BEGIN(MSG_PROBE_THREAD, LC_THREAD, "sxxd", temp, (unsigned int) &target, stackSize, priority);
1313 PACK_COMMON_END(ret, ret, blockresult);
1314 PACK_THREAD((unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_NEW);
1322 result Thread::GetExitCode(int &exitCode) const {
1324 (Thread::*methodType)(int &exitCode) const;
1325 static methodType GetExitCodep = 0;
1327 probeInfo_t probeInfo;
1330 bool bfiltering = true;
1332 // int exitOld = exitCode;
1334 if (!GetExitCodep) {
1336 if(lib_handle[LIBOSP_APPFW] == NULL) {
1337 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
1338 if (lib_handle[LIBOSP_APPFW] == NULL) {
1339 perror("dlopen failed : libosp-appfw.so");
1343 tmpPtr = dlsym(lib_handle[LIBOSP_APPFW],
1344 "_ZNK5Tizen4Base7Runtime6Thread11GetExitCodeERi");
1346 if (tmpPtr == NULL || dlerror() != NULL) {
1347 perror("dlsym failed : Tizen::Base::Runtime::Thread::GetExitCode");
1351 memcpy(&GetExitCodep, &tmpPtr, sizeof(tmpPtr));
1355 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
1356 setProbePoint(&probeInfo);
1360 ret = (this->*GetExitCodep)(exitCode);
1362 if (postBlockBegin(blockresult)) {
1366 log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", LC_THREAD,
1367 probeInfo.eventIndex, "Thread::GetExitCode",
1368 probeInfo.currentTime, probeInfo.pID, probeInfo.tID);
1370 // log.length += sprintf(log.data + log.length, "`,(%d->%d)`,%ld", exitOld,
1372 log.length += sprintf(log.data + log.length, "`,%d`,%ld", exitCode, ret);
1373 //PCAddr,errno,InternalCall,CallerPCAddr,PThreadID,OspThreadID,ThreadType,ApiType
1374 log.length += sprintf(log.data + log.length,
1375 "`,0`,%lu`,%d`,%u`,`,0x%x`,%d`,%d", ret, blockresult,
1376 (unsigned int)CALLER_ADDRESS, (unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_OTHER);
1378 log.length += sprintf(log.data + log.length, "`,\ncallstack_start`,");
1379 getBacktraceString(&log, 4096 - log.length - 17);
1380 log.length += sprintf(log.data + log.length, "`,callstack_end");
1382 printLog(&log, MSG_LOG);
1384 PREPARE_LOCAL_BUF();
1385 PACK_COMMON_BEGIN(MSG_PROBE_THREAD, LC_THREAD, "d", exitCode);
1386 PACK_COMMON_END(ret, ret, blockresult);
1387 PACK_THREAD((unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_OTHER);
1395 const Tizen::Base::String & Thread::GetName(void) const {
1396 typedef const Tizen::Base::String &
1397 (Thread::*methodType)(void) const;
1398 static methodType GetNamep = 0;
1399 probeInfo_t probeInfo;
1402 bool bfiltering = true;
1408 if(lib_handle[LIBOSP_APPFW] == NULL) {
1409 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
1410 if (lib_handle[LIBOSP_APPFW] == NULL) {
1411 perror("dlopen failed : libosp-appfw.so");
1415 tmpPtr = dlsym(lib_handle[LIBOSP_APPFW], "_ZNK5Tizen4Base7Runtime6Thread7GetNameEv");
1417 if (tmpPtr == NULL || dlerror() != NULL) {
1418 perror("dlsym failed : Tizen::Base::Runtime::Thread::GetName");
1422 memcpy(&GetNamep, &tmpPtr, sizeof(tmpPtr));
1426 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
1427 setProbePoint(&probeInfo);
1431 const Tizen::Base::String& ret = (this->*GetNamep)();
1432 result res = GetLastResult();
1434 if (postBlockBegin(blockresult)) {
1438 log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", LC_THREAD,
1439 probeInfo.eventIndex, "Thread::GetName", probeInfo.currentTime,
1440 probeInfo.pID, probeInfo.tID);
1442 WcharToChar(temp, ret.GetPointer());
1443 log.length += sprintf(log.data + log.length, "`,`,%s", temp);
1444 //PCAddr,errno,InternalCall,CallerPCAddr,PThreadID,OspThreadID,ThreadType,ApiType
1445 log.length += sprintf(log.data + log.length,
1446 "`,0`,%lu`,%d`,%u`,`,0x%x`,%d`,%d", res, blockresult,
1447 (unsigned int)CALLER_ADDRESS, (unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_OTHER);
1449 log.length += sprintf(log.data + log.length, "`,\ncallstack_start`,");
1450 getBacktraceString(&log, 4096 - log.length - 17);
1451 log.length += sprintf(log.data + log.length, "`,callstack_end");
1453 printLog(&log, MSG_LOG);
1455 PREPARE_LOCAL_BUF();
1456 PACK_COMMON_BEGIN(MSG_PROBE_THREAD, LC_THREAD, "s", temp);
1457 PACK_COMMON_END(0, res, blockresult);
1458 PACK_THREAD((unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_OTHER);
1466 result Thread::Join(void) {
1468 (Thread::*methodType)(void);
1469 static methodType Joinp = 0;
1471 probeInfo_t probeInfo;
1474 bool bfiltering = true;
1479 if(lib_handle[LIBOSP_APPFW] == NULL) {
1480 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
1481 if (lib_handle[LIBOSP_APPFW] == NULL) {
1482 perror("dlopen failed : libosp-appfw.so");
1486 tmpPtr = dlsym(lib_handle[LIBOSP_APPFW], "_ZN5Tizen4Base7Runtime6Thread4JoinEv");
1488 if (tmpPtr == NULL || dlerror() != NULL) {
1489 perror("dlsym failed : Tizen::Base::Runtime::Thread::Join");
1493 memcpy(&Joinp, &tmpPtr, sizeof(tmpPtr));
1497 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
1498 setProbePoint(&probeInfo);
1502 log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", LC_THREAD,
1503 probeInfo.eventIndex, "Thread::Join", probeInfo.currentTime,
1504 probeInfo.pID, probeInfo.tID);
1506 log.length += sprintf(log.data + log.length, "`,`,");
1507 //PCAddr,errno,InternalCall,CallerPCAddr,PThreadID,OspThreadID,ThreadType,ApiType
1508 log.length += sprintf(log.data + log.length,
1509 "`,0`,0`,%d`,%u`,`,0x%x`,%d`,%d",blockresult,
1510 (unsigned int)CALLER_ADDRESS, (unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_WAIT_START);
1512 log.length += sprintf(log.data + log.length, "`,\ncallstack_start`,");
1513 log.length += sprintf(log.data + log.length, "`,callstack_end");
1515 printLog(&log, MSG_LOG);
1517 PREPARE_LOCAL_BUF();
1518 PACK_COMMON_BEGIN(MSG_PROBE_THREAD, LC_THREAD, "", 0);
1519 PACK_COMMON_END(0, 0, blockresult);
1520 PACK_THREAD((unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_WAIT_START);
1526 ret = (this->*Joinp)();
1528 if (postBlockBegin(blockresult)) {
1529 setProbePoint(&probeInfo);
1533 log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", LC_THREAD,
1534 probeInfo.eventIndex, "Thread::Join", probeInfo.currentTime,
1535 probeInfo.pID, probeInfo.tID);
1537 log.length += sprintf(log.data + log.length, "`,`,%ld", ret);
1538 //PCAddr,errno,InternalCall,CallerPCAddr,PThreadID,OspThreadID,ThreadType,ApiType
1539 log.length += sprintf(log.data + log.length,
1540 "`,0`,%lu`,%d`,%u`,`,0x%x`,%d`,%d", ret,blockresult,
1541 (unsigned int)CALLER_ADDRESS, (unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_WAIT_END);
1543 log.length += sprintf(log.data + log.length, "`,\ncallstack_start`,");
1544 getBacktraceString(&log, 4096 - log.length - 17);
1545 log.length += sprintf(log.data + log.length, "`,callstack_end");
1547 printLog(&log, MSG_LOG);
1549 PREPARE_LOCAL_BUF();
1550 PACK_COMMON_BEGIN(MSG_PROBE_THREAD, LC_THREAD, "", 0);
1551 PACK_COMMON_END(ret, ret, blockresult);
1552 PACK_THREAD((unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_WAIT_END);
1559 //Tizen::Base::Object * Thread::Run(void) {
1560 // typedef Tizen::Base::Object * (Thread::*methodType)(void);
1561 // static methodType Runp = 0;
1562 // Tizen::Base::Object * ret;
1563 // probeInfo_t probeInfo;
1566 // bool bfiltering = true;
1570 // log.data[0] = '\0';
1571 // log.length = sprintf(log.data, "call Thread::Run");
1572 // printLog(&log, MSG_MSG);
1575 // probeBlockStart();
1576 // void* lib_handle = dlopen("libosp-appfw.so", RTLD_LAZY);
1577 // if (lib_handle == NULL) {
1578 // perror("dlopen failed : libosp-appfw.so");
1581 // log.data[0] = '\0';
1582 // log.length = sprintf(log.data, "dlopen failed :libosp-appfw.so");
1583 // printLog(&log, MSG_MSG);
1589 // "_ZN5Tizen4Base7Runtime6Thread3RunEv");
1591 // if (tmpPtr == NULL || dlerror() != NULL) {
1592 // perror("dlsym failed : Thread::Run");
1595 // log.data[0] = '\0';
1596 // log.length = sprintf(log.data, "dlsym failed : Thread::Run");
1597 // printLog(&log, MSG_MSG);
1601 // memcpy(&Runp, &tmpPtr, sizeof(tmpPtr));
1605 // if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
1606 // setProbePoint(&probeInfo);
1610 // ret = (this->*Runp)();
1612 // if (postBlockBegin(blockresult)) {
1615 // log.data[0] = '\0';
1616 // log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", LC_THREAD,
1617 // probeInfo.eventIndex, "Thread::Run",
1618 // probeInfo.currentTime, probeInfo.pID, probeInfo.tID);
1620 // log.length += sprintf(log.data + log.length, "`,`,0x%x",(unsigned int)ret;
1621 // //PCAddr,errno,InternalCall,size,FD,FDType,FDApiType,FileSize,FilePath
1624 // log.length += sprintf(log.data + log.length,
1625 // "`,0`,0`,%d`,0`,0x%x`,%d`,%d`,`,", blockresult,
1626 // (unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_OTHER);
1628 // log.length += sprintf(log.data + log.length, "`,\ncallstack_start`,");
1629 // getBacktraceString(&log, 4096 - log.length - 17);
1630 // log.length += sprintf(log.data + log.length, "`,callstack_end");
1632 // printLog(&log, MSG_LOG);
1638 result Thread::Start(void) {
1639 typedef result (Thread::*methodType)(void);
1640 static methodType Startp = 0;
1642 probeInfo_t probeInfo;
1645 bool bfiltering = true;
1650 if(lib_handle[LIBOSP_APPFW] == NULL) {
1651 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
1652 if (lib_handle[LIBOSP_APPFW] == NULL) {
1653 perror("dlopen failed : libosp-appfw.so");
1657 tmpPtr = dlsym(lib_handle[LIBOSP_APPFW], "_ZN5Tizen4Base7Runtime6Thread5StartEv");
1659 if (tmpPtr == NULL || dlerror() != NULL) {
1660 perror("dlsym failed : Tizen::Base::Runtime::Thread::Start");
1664 memcpy(&Startp, &tmpPtr, sizeof(tmpPtr));
1668 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
1669 setProbePoint(&probeInfo);
1673 ret = (this->*Startp)();
1675 if (postBlockBegin(blockresult)) {
1679 log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", LC_THREAD,
1680 probeInfo.eventIndex, "Thread::Start", probeInfo.currentTime,
1681 probeInfo.pID, probeInfo.tID);
1683 log.length += sprintf(log.data + log.length, "`,`,%ld", ret);
1684 //PCAddr,errno,InternalCall,CallerPCAddr,PThreadID,OspThreadID,ThreadType,ApiType
1685 log.length += sprintf(log.data + log.length,
1686 "`,0`,%lu`,%d`,%u`,`,0x%x`,%d`,%d", ret, blockresult,
1687 (unsigned int)CALLER_ADDRESS, (unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_START);
1689 log.length += sprintf(log.data + log.length, "`,\ncallstack_start`,");
1690 getBacktraceString(&log, 4096 - log.length - 17);
1691 log.length += sprintf(log.data + log.length, "`,callstack_end");
1693 printLog(&log, MSG_LOG);
1695 PREPARE_LOCAL_BUF();
1696 PACK_COMMON_BEGIN(MSG_PROBE_THREAD, LC_THREAD, "", 0);
1697 PACK_COMMON_END(ret, ret, blockresult);
1698 PACK_THREAD((unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_START);
1705 result Thread::Stop(void) {
1706 typedef result (Thread::*methodType)(void);
1707 static methodType Stopp = 0;
1709 probeInfo_t probeInfo;
1712 bool bfiltering = true;
1717 if(lib_handle[LIBOSP_APPFW] == NULL) {
1718 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
1719 if (lib_handle[LIBOSP_APPFW] == NULL) {
1720 perror("dlopen failed : libosp-appfw.so");
1724 tmpPtr = dlsym(lib_handle[LIBOSP_APPFW], "_ZN5Tizen4Base7Runtime6Thread4StopEv");
1726 if (tmpPtr == NULL || dlerror() != NULL) {
1727 perror("dlsym failed : Tizen::Base::Runtime::Thread::Stop");
1731 memcpy(&Stopp, &tmpPtr, sizeof(tmpPtr));
1735 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
1736 setProbePoint(&probeInfo);
1740 ret = (this->*Stopp)();
1742 if (postBlockBegin(blockresult)) {
1746 log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", LC_THREAD,
1747 probeInfo.eventIndex, "Thread::Stop", probeInfo.currentTime,
1748 probeInfo.pID, probeInfo.tID);
1750 log.length += sprintf(log.data + log.length, "`,`,%ld", ret);
1751 //PCAddr,errno,InternalCall,CallerPCAddr,PThreadID,OspThreadID,ThreadType,ApiType
1752 log.length += sprintf(log.data + log.length,
1753 "`,0`,%lu`,%d`,%u`,`,0x%x`,%d`,%d", ret, blockresult,
1754 (unsigned int)CALLER_ADDRESS, (unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_STOP);
1756 log.length += sprintf(log.data + log.length, "`,\ncallstack_start`,");
1757 getBacktraceString(&log, 4096 - log.length - 17);
1758 log.length += sprintf(log.data + log.length, "`,callstack_end");
1760 printLog(&log, MSG_LOG);
1762 PREPARE_LOCAL_BUF();
1763 PACK_COMMON_BEGIN(MSG_PROBE_THREAD, LC_THREAD, "", 0);
1764 PACK_COMMON_END(ret, ret, blockresult);
1765 PACK_THREAD((unsigned int) this, THREAD_OSPTHREAD_WORKER, THREAD_API_STOP);
1773 result EventDrivenThread::Construct(long stackSize, ThreadPriority priority) {
1775 (Thread::*methodType)(long stackSize, ThreadPriority priority);
1776 static methodType Constructp = 0;
1778 probeInfo_t probeInfo;
1781 bool bfiltering = true;
1786 if(lib_handle[LIBOSP_APPFW] == NULL) {
1787 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
1788 if (lib_handle[LIBOSP_APPFW] == NULL) {
1789 perror("dlopen failed : libosp-appfw.so");
1793 tmpPtr = dlsym(lib_handle[LIBOSP_APPFW],
1794 "_ZN5Tizen4Base7Runtime17EventDrivenThread9ConstructElNS1_14ThreadPriorityE");
1795 if (tmpPtr == NULL || dlerror() != NULL) {
1796 perror("dlsym failed : Tizen::Base::Runtime::EventDrivenThread::Construct");
1800 memcpy(&Constructp, &tmpPtr, sizeof(tmpPtr));
1804 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
1805 setProbePoint(&probeInfo);
1809 ret = (this->*Constructp)(stackSize, priority);
1811 if (postBlockBegin(blockresult)) {
1815 log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", LC_THREAD,
1816 probeInfo.eventIndex, "EventDrivenThread::Construct",
1817 probeInfo.currentTime, probeInfo.pID, probeInfo.tID);
1819 log.length += sprintf(log.data + log.length, "`,%ld, %d`,%ld",
1820 stackSize, priority, ret);
1821 //PCAddr,errno,InternalCall,CallerPCAddr,PThreadID,OspThreadID,ThreadType,ApiType
1822 log.length += sprintf(log.data + log.length,
1823 "`,0`,%lu`,%d`,%u`,`,0x%x`,%d`,%d", ret, blockresult,
1824 (unsigned int)CALLER_ADDRESS, (unsigned int) this, THREAD_OSPTHREAD_EVENTDRIVEN, THREAD_API_NEW);
1826 log.length += sprintf(log.data + log.length, "`,\ncallstack_start`,");
1827 getBacktraceString(&log, 4096 - log.length - 17);
1828 log.length += sprintf(log.data + log.length, "`,callstack_end");
1830 printLog(&log, MSG_LOG);
1832 PREPARE_LOCAL_BUF();
1833 PACK_COMMON_BEGIN(MSG_PROBE_THREAD, LC_THREAD, "xd", stackSize, priority);
1834 PACK_COMMON_END(ret, ret, blockresult);
1835 PACK_THREAD((unsigned int) this, THREAD_OSPTHREAD_EVENTDRIVEN, THREAD_API_NEW);
1843 result EventDrivenThread::Construct(const Tizen::Base::String &name, long stackSize,
1844 ThreadPriority priority) {
1846 (Thread::*methodType)(const Tizen::Base::String &name, long stackSize,
1847 ThreadPriority priority);
1848 static methodType Constructp = 0;
1850 probeInfo_t probeInfo;
1853 bool bfiltering = true;
1859 if(lib_handle[LIBOSP_APPFW] == NULL) {
1860 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
1861 if (lib_handle[LIBOSP_APPFW] == NULL) {
1862 perror("dlopen failed : libosp-appfw.so");
1868 lib_handle[LIBOSP_APPFW],
1869 "_ZN5Tizen4Base7Runtime17EventDrivenThread9ConstructERKNS0_6StringElNS1_14ThreadPriorityE");
1871 if (tmpPtr == NULL || dlerror() != NULL) {
1872 perror("dlsym failed : Tizen::Base::Runtime::EventDrivenThread::Construct");
1876 memcpy(&Constructp, &tmpPtr, sizeof(tmpPtr));
1880 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
1881 setProbePoint(&probeInfo);
1885 ret = (this->*Constructp)(name, stackSize, priority);
1887 if (postBlockBegin(blockresult)) {
1891 log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", LC_THREAD,
1892 probeInfo.eventIndex, "EventDrivenThread::Construct",
1893 probeInfo.currentTime, probeInfo.pID, probeInfo.tID);
1895 WcharToChar(temp, name.GetPointer());
1896 log.length += sprintf(log.data + log.length, "`,%s, %ld, %d`,%ld", temp,
1897 stackSize, priority, ret);
1898 //PCAddr,errno,InternalCall,CallerPCAddr,PThreadID,OspThreadID,ThreadType,ApiType
1899 log.length += sprintf(log.data + log.length,
1900 "`,0`,%lu`,%d`,%u`,`,0x%x`,%d`,%d", ret, blockresult,
1901 (unsigned int)CALLER_ADDRESS, (unsigned int) this, THREAD_OSPTHREAD_EVENTDRIVEN, THREAD_API_NEW);
1903 log.length += sprintf(log.data + log.length, "`,\ncallstack_start`,");
1904 getBacktraceString(&log, 4096 - log.length - 17);
1905 log.length += sprintf(log.data + log.length, "`,callstack_end");
1907 printLog(&log, MSG_LOG);
1909 PREPARE_LOCAL_BUF();
1910 PACK_COMMON_BEGIN(MSG_PROBE_THREAD, LC_THREAD, "sx", temp, stackSize);
1911 PACK_COMMON_END(ret, ret, blockresult);
1912 PACK_THREAD((unsigned int) this, THREAD_OSPTHREAD_EVENTDRIVEN, THREAD_API_NEW);
1921 result EventDrivenThread::Quit() {
1922 typedef result (Thread::*methodType)(void);
1923 static methodType Quitp = 0;
1925 probeInfo_t probeInfo;
1928 bool bfiltering = true;
1933 if(lib_handle[LIBOSP_APPFW] == NULL) {
1934 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
1935 if (lib_handle[LIBOSP_APPFW] == NULL) {
1936 perror("dlopen failed : libosp-appfw.so");
1940 tmpPtr = dlsym(lib_handle[LIBOSP_APPFW], "_ZN5Tizen4Base7Runtime17EventDrivenThread4QuitEv");
1942 if (tmpPtr == NULL || dlerror() != NULL) {
1943 perror("dlsym failed : Tizen::Base::Runtime::EventThread::Quit");
1947 memcpy(&Quitp, &tmpPtr, sizeof(tmpPtr));
1951 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
1952 setProbePoint(&probeInfo);
1956 ret = (this->*Quitp)();
1958 if (postBlockBegin(blockresult)) {
1962 log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", LC_THREAD,
1963 probeInfo.eventIndex, "EventThread::Quit", probeInfo.currentTime,
1964 probeInfo.pID, probeInfo.tID);
1966 log.length += sprintf(log.data + log.length, "`,`,%ld", ret);
1967 //PCAddr,errno,InternalCall,CallerPCAddr,PThreadID,OspThreadID,ThreadType,ApiType
1968 log.length += sprintf(log.data + log.length,
1969 "`,0`,%lu`,%d`,%u`,`,0x%x`,%d`,%d", ret, blockresult,
1970 (unsigned int)CALLER_ADDRESS, (unsigned int) this, THREAD_OSPTHREAD_EVENTDRIVEN, THREAD_API_STOP);
1972 log.length += sprintf(log.data + log.length, "`,\ncallstack_start`,");
1973 getBacktraceString(&log, 4096 - log.length - 17);
1974 log.length += sprintf(log.data + log.length, "`,callstack_end");
1976 printLog(&log, MSG_LOG);
1978 PREPARE_LOCAL_BUF();
1979 PACK_COMMON_BEGIN(MSG_PROBE_THREAD, LC_THREAD, "", 0);
1980 PACK_COMMON_END(ret, ret, blockresult);
1981 PACK_THREAD((unsigned int) this, THREAD_OSPTHREAD_EVENTDRIVEN, THREAD_API_STOP);