From 25872d9a33bab382843a161babd3e6e37bf57316 Mon Sep 17 00:00:00 2001 From: arpi_esp Date: Thu, 15 Mar 2001 23:21:40 +0000 Subject: using setjmp/longjmp to handle sig11 in libmpeg2 git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@112 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libmpeg2/decode.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) (limited to 'libmpeg2') diff --git a/libmpeg2/decode.c b/libmpeg2/decode.c index b5779b0139..467f704c48 100644 --- a/libmpeg2/decode.c +++ b/libmpeg2/decode.c @@ -11,6 +11,10 @@ #include #include +#include +#include + + #include "config.h" #include "video_out.h" @@ -275,6 +279,11 @@ static int parse_chunk (vo_functions_t * output, int code, uint8_t * buffer) return is_frame_done; } +static jmp_buf mpeg2_jmp_buf; + +static void mpeg2_sighandler(int sig){ + longjmp(mpeg2_jmp_buf,1); +} int mpeg2_decode_data (vo_functions_t *output, uint8_t *current, uint8_t *end) { @@ -286,6 +295,14 @@ int mpeg2_decode_data (vo_functions_t *output, uint8_t *current, uint8_t *end) uint8_t *pos=NULL; uint8_t *start=current; int ret = 0; + void* old_sigh; + + if(setjmp(mpeg2_jmp_buf)!=0){ + printf("@@@ FATAL!!!??? libmpeg2 returned from sig11 before the actual decoding! @@@\n"); + return 0; + } + + old_sigh=signal(SIGSEGV,mpeg2_sighandler); // printf("RCVD %d bytes\n",end-current); @@ -305,12 +322,18 @@ while(current