# HG changeset patch # User alex # Date 1004841805 0 # Node ID d98d6651ffb1a8f1e4f9a60b43b7f2cb262af3d8 # Parent 476b9b3b91be10896f0fa64e452d93b09ae3e36b fixed TlsAlloc diff -r 476b9b3b91be -r d98d6651ffb1 loader/win32.c --- a/loader/win32.c Sun Nov 04 02:28:23 2001 +0000 +++ b/loader/win32.c Sun Nov 04 02:43:25 2001 +0000 @@ -1125,13 +1125,14 @@ int i; for (i=0; i < CRITSECS_LIST_MAX; i++) - if (critsecs_list[i].cs_win == cs_win) + if (critsecs_list[i].cs_win == cs_win && critsecs_list[i].cs_unix) return(critsecs_list[i].cs_unix); return(NULL); } #endif -#define CRITSECS_NEWTYPE 1 +#undef CRITSECS_NEWTYPE +//#define CRITSECS_NEWTYPE 1 void WINAPI expInitializeCriticalSection(CRITICAL_SECTION* c) { @@ -1153,7 +1154,13 @@ printf("InitializeCriticalSection(%p) - no more space in list\n", c); return; } - cs = malloc(sizeof(struct CRITSECT)); + printf("got unused space at %d\n", i); + cs = expmalloc(sizeof(struct CRITSECT)); + if (!cs) + { + printf("InitializeCriticalSection(%p) - out of memory\n", c); + return; + } pthread_mutex_init(&cs->mutex, NULL); cs->locked = 0; critsecs_list[i].cs_win = c; @@ -1183,6 +1190,7 @@ dbgprintf("EnterCriticalSection(0x%x)\n",c); if (!cs) { + printf("entered uninitialized critisec!\n"); expInitializeCriticalSection(c); #ifdef CRITSECS_NEWTYPE cs=critsecs_get_unix(c); @@ -1240,7 +1248,7 @@ } critsecs_list[i].cs_win = NULL; - free(critsecs_list[i].cs_unix); + expfree(critsecs_list[i].cs_unix); critsecs_list[i].cs_unix = NULL; dbgprintf("DeleteCriticalSection -> itemno=%d\n", i); } @@ -1282,7 +1290,8 @@ g_tls=g_tls->next; } dbgprintf("TlsAlloc() => 0x%x\n", g_tls); - g_tls->value=0; /* XXX For Divx.dll */ + if (g_tls) + g_tls->value=0; /* XXX For Divx.dll */ return g_tls; }