20#include <osl/thread.hxx>
21#include <osl/diagnose.h>
23#include <rtl/process.h>
24#include <rtl/byteseq.hxx>
26#include <uno/threadpool.h>
31using namespace ::
cppu;
35 rtl_byte_sequence_constructNoDefault( ppThreadId , 4 + 16 );
36 sal_uInt32
id = osl::Thread::getCurrentIdentifier();
37 (*ppThreadId)->elements[0] =
id & 0xFF;
38 (*ppThreadId)->elements[1] = (
id >> 8) & 0xFF;
39 (*ppThreadId)->elements[2] = (
id >> 16) & 0xFF;
40 (*ppThreadId)->elements[3] = (
id >> 24) & 0xFF;
41 rtl_getGlobalProcessId(
reinterpret_cast<sal_uInt8 *
>(&(*ppThreadId)->elements[4]) );
44extern "C" void SAL_CALL
56 id.pLocalThreadId = *ppThreadId;
57 id.pCurrentId = *ppThreadId;
58 id.nRefCountOfCurrentId = 1;
59 rtl_byte_sequence_acquire(
id.pLocalThreadId );
60 rtl_byte_sequence_acquire(
id.pCurrentId );
65 id.nRefCountOfCurrentId ++;
68 rtl_byte_sequence_release( *ppThreadId );
70 *ppThreadId =
id.pCurrentId;
71 rtl_byte_sequence_acquire( *ppThreadId );
79 OSL_ASSERT(
id.bInit );
80 OSL_ASSERT(
id.nRefCountOfCurrentId );
82 id.nRefCountOfCurrentId --;
83 if( !
id.nRefCountOfCurrentId && (
id.pLocalThreadId !=
id.pCurrentId) )
85 rtl_byte_sequence_assign( &(
id.pCurrentId) ,
id.pLocalThreadId );
95 id.pLocalThreadId =
nullptr;
97 id.nRefCountOfCurrentId = 1;
98 id.pCurrentId = pThreadId;
99 rtl_byte_sequence_acquire(
id.pCurrentId);
104 OSL_ASSERT( 0 ==
id.nRefCountOfCurrentId );
105 if( 0 ==
id.nRefCountOfCurrentId )
107 rtl_byte_sequence_assign(&(
id.pCurrentId ), pThreadId );
108 id.nRefCountOfCurrentId ++;
IdContainer & getIdContainer()
void SAL_CALL uno_releaseIdFromCurrentThread() SAL_THROW_EXTERN_C()
static void createLocalId(sal_Sequence **ppThreadId)
sal_Bool SAL_CALL uno_bindIdToCurrentThread(sal_Sequence *pThreadId) SAL_THROW_EXTERN_C()
void SAL_CALL uno_getIdOfCurrentThread(sal_Sequence **ppThreadId) SAL_THROW_EXTERN_C()
#define SAL_THROW_EXTERN_C()