summaryrefslogtreecommitdiffstats
path: root/osdep
diff options
context:
space:
mode:
authorranma <ranma@b3059339-0415-0410-9bf9-f77b7e298cf2>2003-11-11 10:39:36 +0000
committerranma <ranma@b3059339-0415-0410-9bf9-f77b7e298cf2>2003-11-11 10:39:36 +0000
commit95e49827fd83c66ef63c9274ba157bb872a044d3 (patch)
tree543813a746d32391047ac24ba013224ee6db62b1 /osdep
parentdadd9e6b757ae407fba49d759252b37b68d8c371 (diff)
downloadmpv-95e49827fd83c66ef63c9274ba157bb872a044d3.tar.bz2
mpv-95e49827fd83c66ef63c9274ba157bb872a044d3.tar.xz
Fix pthread & lrmi segfault issue. ("Oleg I. Vdovikin" <vdovikin@jscc.ru>)
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@11435 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'osdep')
-rw-r--r--osdep/lrmi.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/osdep/lrmi.c b/osdep/lrmi.c
index 12dd6e4c3c..c8aac7700c 100644
--- a/osdep/lrmi.c
+++ b/osdep/lrmi.c
@@ -11,6 +11,7 @@ This software has NO WARRANTY. Use it at your own risk.
Original location: http://cvs.debian.org/lrmi/
*/
+#include <signal.h>
#include <stdio.h>
#include <string.h>
#include <sys/io.h>
@@ -789,10 +790,17 @@ static int
run_vm86(void)
{
unsigned int vret;
+ sigset_t allsigs, cursigs;
+ unsigned long oldgs;
while (1)
{
+ sigfillset(&allsigs);
+ sigprocmask(SIG_SETMASK, &allsigs, &cursigs);
+ asm volatile ("movl %%gs, %0" : "=g" (oldgs));
vret = lrmi_vm86(&context.vm);
+ asm volatile ("movl %0, %%gs" :: "g" (oldgs));
+ sigprocmask(SIG_SETMASK, &cursigs, NULL);
if (VM86_TYPE(vret) == VM86_INTx)
{