summaryrefslogtreecommitdiffstats
path: root/loader
diff options
context:
space:
mode:
authorsesse <sesse@b3059339-0415-0410-9bf9-f77b7e298cf2>2010-03-17 23:42:11 +0000
committersesse <sesse@b3059339-0415-0410-9bf9-f77b7e298cf2>2010-03-17 23:42:11 +0000
commit67b20ea6112d99295134f2e1430e1ab9f8c88529 (patch)
tree869b37c443e2b62b9e17ace047aa0464551a5c06 /loader
parentc7dbfb6467e3fb81cd7181320a30da5d61cc2906 (diff)
downloadmpv-67b20ea6112d99295134f2e1430e1ab9f8c88529.tar.bz2
mpv-67b20ea6112d99295134f2e1430e1ab9f8c88529.tar.xz
Fix thread safety issue in mreq_private: last_alloc was accessed from multiple
threads without being under a mutex. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30928 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'loader')
-rw-r--r--loader/win32.c11
1 files changed, 3 insertions, 8 deletions
diff --git a/loader/win32.c b/loader/win32.c
index b349ee91af..b687135049 100644
--- a/loader/win32.c
+++ b/loader/win32.c
@@ -146,7 +146,7 @@ static void longcount_stub(long long*);
static unsigned int (*localcount)()=localcount_stub;
static void (*longcount)(long long*)=longcount_stub;
-static pthread_mutex_t memmut;
+static pthread_mutex_t memmut = PTHREAD_MUTEX_INITIALIZER;
static unsigned int localcount_stub(void)
{
@@ -366,14 +366,9 @@ void* mreq_private(int size, int to_zero, int type)
if (to_zero)
memset(header, 0, nsize);
#ifdef GARBAGE
- if (!last_alloc)
- {
- pthread_mutex_init(&memmut, NULL);
- pthread_mutex_lock(&memmut);
- }
- else
+ pthread_mutex_lock(&memmut);
+ if (last_alloc)
{
- pthread_mutex_lock(&memmut);
last_alloc->next = header; /* set next */
}