summaryrefslogtreecommitdiffstats
path: root/loader
diff options
context:
space:
mode:
authoralex <alex@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-11-04 02:43:25 +0000
committeralex <alex@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-11-04 02:43:25 +0000
commit6a4f09c708433a0e923805686dcc79e360e4b080 (patch)
tree11e8315189abfb40400255a8e099654601ad3764 /loader
parent96b471219dac29556fea223b325a9e450e997921 (diff)
downloadmpv-6a4f09c708433a0e923805686dcc79e360e4b080.tar.bz2
mpv-6a4f09c708433a0e923805686dcc79e360e4b080.tar.xz
fixed TlsAlloc
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@2671 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'loader')
-rw-r--r--loader/win32.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/loader/win32.c b/loader/win32.c
index 469ba57c4a..10478ea71c 100644
--- a/loader/win32.c
+++ b/loader/win32.c
@@ -1125,13 +1125,14 @@ struct CRITSECT *critsecs_get_unix(CRITICAL_SECTION *cs_win)
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 @@ void WINAPI expInitializeCriticalSection(CRITICAL_SECTION* c)
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 @@ void WINAPI expEnterCriticalSection(CRITICAL_SECTION* c)
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 @@ void WINAPI expDeleteCriticalSection(CRITICAL_SECTION *c)
}
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 @@ void* WINAPI expTlsAlloc()
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;
}