Changeset 125 for trunk/src/kernel32
- Timestamp:
- Jun 19, 1999, 7:58:50 PM (26 years ago)
- Location:
- trunk/src/kernel32
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/makefile
r114 r125 1 # $Id: makefile,v 1. 6 1999-06-17 21:52:01 phallerExp $1 # $Id: makefile,v 1.7 1999-06-19 17:58:32 sandervl Exp $ 2 2 3 3 # … … 125 125 thread.OBJ: \ 126 126 .\thread.cpp \ 127 $(PDWIN32_INCLUDE)\wprocess.h \ 127 128 thread.h 128 129 … … 172 173 $(PDWIN32_INCLUDE)\winimage.h \ 173 174 $(PDWIN32_INCLUDE)\versionos2.h \ 175 $(PDWIN32_INCLUDE)\wprocess.h \ 174 176 console2.h \ 175 177 cio.h \ -
trunk/src/kernel32/os2util.cpp
r123 r125 1 /* $Id: os2util.cpp,v 1. 4 1999-06-19 13:57:51sandervl Exp $ */1 /* $Id: os2util.cpp,v 1.5 1999-06-19 17:58:32 sandervl Exp $ */ 2 2 3 3 /* … … 284 284 } 285 285 //****************************************************************************** 286 //****************************************************************************** 286 //Allocate local thread memory 287 //****************************************************************************** 288 ULONG OS2AllocThreadLocalMemory(int nrdwords) 289 { 290 APIRET rc; 291 PULONG thrdaddr; 292 293 rc = DosAllocThreadLocalMemory(nrdwords, &thrdaddr); 294 if(rc) { 295 dprintf(("DosAllocThreadLocalMemory failed %d", rc)); 296 return 0; 297 } 298 return (ULONG)thrdaddr; 299 } 300 //****************************************************************************** 301 //****************************************************************************** 302 -
trunk/src/kernel32/os2util.h
r123 r125 1 /* $Id: os2util.h,v 1. 4 1999-06-19 13:57:51sandervl Exp $ */1 /* $Id: os2util.h,v 1.5 1999-06-19 17:58:33 sandervl Exp $ */ 2 2 3 3 /* … … 59 59 ULONG OS2GetPIB(int piboff); 60 60 61 ULONG OS2AllocThreadLocalMemory(int nrdwords); 62 61 63 #ifdef __cplusplus 62 64 } -
trunk/src/kernel32/thread.H
r99 r125 1 /* $Id: thread.H,v 1. 3 1999-06-10 19:11:31 phallerExp $ */1 /* $Id: thread.H,v 1.4 1999-06-19 17:58:33 sandervl Exp $ */ 2 2 3 3 /* … … 22 22 { 23 23 public: 24 Win32Thread(LPTHREAD_START_ROUTINE pUserCallback, LPVOID lpData );24 Win32Thread(LPTHREAD_START_ROUTINE pUserCallback, LPVOID lpData, DWORD dwFlags); 25 25 ~Win32Thread(); 26 26 … … 30 30 LPVOID lpUserData; 31 31 LPTHREAD_START_ROUTINE pCallback; 32 DWORD dwFlags; 33 32 34 friend static DWORD OPEN32API Win32ThreadProc(LPVOID lpData); 33 35 }; -
trunk/src/kernel32/thread.cpp
r34 r125 1 /* $Id: thread.cpp,v 1. 4 1999-06-02 16:00:38 cbratschiExp $ */1 /* $Id: thread.cpp,v 1.5 1999-06-19 17:58:33 sandervl Exp $ */ 2 2 3 3 /* … … 17 17 #include "except.h" 18 18 #include "misc.h" 19 #include <wprocess.h> 19 20 20 21 static DWORD OPEN32API Win32ThreadProc(LPVOID lpData); … … 24 25 //****************************************************************************** 25 26 HANDLE WIN32API CreateThread(LPSECURITY_ATTRIBUTES lpsa, DWORD cbStack, 26 LPTHREAD_START_ROUTINE lpStartAddr,27 LPVOID lpvThreadParm, DWORD fdwCreate,28 LPDWORD lpIDThread)27 LPTHREAD_START_ROUTINE lpStartAddr, 28 LPVOID lpvThreadParm, DWORD fdwCreate, 29 LPDWORD lpIDThread) 29 30 { 30 Win32Thread *winthread = new Win32Thread(lpStartAddr, lpvThreadParm );31 Win32Thread *winthread = new Win32Thread(lpStartAddr, lpvThreadParm, fdwCreate); 31 32 32 33 if(winthread == 0) … … 122 123 exitcode)); 123 124 125 #ifdef WIN32_TIBSEL 126 DestroyTIB(); 127 #endif 124 128 O32_ExitThread(exitcode); 125 129 } 126 130 //****************************************************************************** 127 131 //****************************************************************************** 128 Win32Thread::Win32Thread(LPTHREAD_START_ROUTINE pUserCallback, LPVOID lpData )132 Win32Thread::Win32Thread(LPTHREAD_START_ROUTINE pUserCallback, LPVOID lpData, DWORD dwFlags) 129 133 { 130 134 lpUserData = lpData; 131 135 pCallback = pUserCallback; 136 this->dwFlags = dwFlags; 132 137 } 133 138 //****************************************************************************** … … 153 158 delete me; //only called once 154 159 155 dprintf(("Win32ThreadProc %d\n", 156 GetCurrentThreadId())); 160 dprintf(("Win32ThreadProc %d\n", GetCurrentThreadId())); 157 161 162 #ifdef WIN32_TIBSEL 163 #else 158 164 ReplaceExceptionHandler(); 165 #endif 159 166 return(winthread(userdata)); 160 167 } -
trunk/src/kernel32/wprocess.cpp
r123 r125 1 /* $Id: wprocess.cpp,v 1. 9 1999-06-19 13:57:51sandervl Exp $ */1 /* $Id: wprocess.cpp,v 1.10 1999-06-19 17:58:33 sandervl Exp $ */ 2 2 3 3 /* … … 38 38 PDB ProcessPDB = {0}; 39 39 USHORT ProcessTIBSel = 0; 40 USHORT OS2Selector = 0; 41 42 //#define WIN32_TIBSEL 40 DWORD *TIBFlatPtr = 0; 41 43 42 //****************************************************************************** 44 43 // Set up the TIB selector and memory for the current thread … … 52 51 USHORT tibsel; 53 52 53 //Allocate one dword to store the flat address of our TEB 54 TIBFlatPtr = (DWORD *)OS2AllocThreadLocalMemory(1); 55 if(TIBFlatPtr == 0) { 56 dprintf(("InitializeTIB: local thread memory alloc failed!!")); 57 DebugInt3(); 58 return; 59 } 54 60 if(OS2AllocSel(PAGE_SIZE, &tibsel) == FALSE) 55 61 { … … 66 72 } 67 73 memset(winteb, 0, PAGE_SIZE); 68 thdb = (THDB *)(winteb+1); 74 thdb = (THDB *)(winteb+1); 75 TIBFlatPtr = (DWORD)winteb; 69 76 70 77 winteb->except = (PVOID)-1; /* 00 Head of exception handling chain */ … … 83 90 thdb->exit_code = 0x103; /* STILL_ACTIVE */ 84 91 thdb->teb_sel = tibsel; 92 thdb->OrgTIBSel = GetFS(); 85 93 86 94 if(OS2GetPIB(PIB_TASKTYPE) == TASKTYPE_PM) … … 96 104 //TLS in executable always TLS index 0? 97 105 ProcessTIBSel = tibsel; 98 OS2Selector = GetFS(); //0x150b99 106 } 100 107 SetFS(tibsel); … … 108 115 void DestroyTIB() 109 116 { 117 #ifdef WIN32_TIBSEL 118 SHORT orgtibsel; 119 TEB *winteb; 120 THDB *thdb; 121 110 122 dprintf(("DestroyTIB: FS = %x", GetFS())); 111 #ifdef WIN32_TIBSEL 112 OS2FreeSel(ProcessTIBSel); 123 124 winteb = (TEB *)TIBFlatPtr; 125 if(winteb) { 126 thdb = (THDB *)(winteb+1); 127 orgtibsel = thdb->OrgTIBSel; 128 129 //Restore our original FS selector 130 SetFS(orgtibsel); 131 132 //And free our own 133 OS2FreeSel(thdb->teb_sel); 134 } 135 else DebugInt3(); 136 113 137 return; 114 138 #endif … … 254 278 #ifdef WIN32_TIBSEL 255 279 //Restore original OS/2 TIB selector 256 SetFS(OS2Selector);280 DestroyTIB(); 257 281 #endif 258 282
Note:
See TracChangeset
for help on using the changeset viewer.