[MPlayer-users] Latest SVN mplayer unable to play Apple's keynote speech
Tom D.
dtom77 at gmail.com
Wed Jun 16 16:26:26 CEST 2010
On Tue, Jun 15, 2010 at 07:59:31PM +0000, Carl Eugen Hoyos wrote:
> Tom D. <dtom77 <at> gmail.com> writes:
>
> > I still get the error.
>
> Which error?
>
>>Reimar Döffinger wrote:
>>The SIGPIPE at the end of the stream.
>>I think this should maybe be fixed in the live555 library (and maybe even
>>is in a newer version), though it maybe would also be better to make
>>MPlayer ignore SIGPIPE.
>>You could try this:
>>Index: mplayer.c
>>===================================================================
>>--- mplayer.c (revision 31425)
>>+++ mplayer.c (working copy)
>>@@ -3030,7 +3030,7 @@
>> signal(SIGINT,exit_sighandler); // Interrupt from keyboard
>>
>> signal(SIGQUIT,exit_sighandler); // Quit from keyboard
>>- signal(SIGPIPE,exit_sighandler); // Some window managers cause this
>>+ signal(SIGPIPE,SIG_IGN); // Some window managers cause this
>> #ifdef CONFIG_SIGHANDLER
>> // fatal errors:
>> signal(SIGBUS,exit_sighandler); // bus error
I applied the patch. Now mplayer just doesn't quit when I want to exit
mplayer. mplayer app just hangs. I've to press cntl+c from keyboard
twice. I'm not expert but can you kindly look at the exit_sighandler()
function whether SIGPIPE being properly handled or not. Now the
function looks like:
static void exit_sighandler(int x){
static int sig_count=0;
#ifdef CONFIG_CRASH_DEBUG
if (!crash_debug || x != SIGTRAP)
#endif
++sig_count;
if(initialized_flags==0 && sig_count>1) exit(1);
if(sig_count==5)
{
/* We're crashing bad and can't uninit cleanly :(
* by popular request, we make one last (dirty)
* effort to restore the user's
* terminal. */
getch2_disable();
exit(1);
}
if(sig_count==6) exit(1);
if(sig_count>6){
// can't stop :(
#ifndef __MINGW32__
kill(getpid(),SIGKILL);
#endif
}
mp_msg(MSGT_CPLAYER,MSGL_FATAL,"\n" MSGTR_IntBySignal,x,
current_module?current_module:"unknown"
);
mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_SIGNAL=%d\n", x);
if(sig_count<=1)
switch(x){
case SIGINT:
case SIGQUIT:
case SIGTERM:
case SIGKILL:
async_quit_request = 1;
return; // killed from keyboard (^C) or killed [-9]
case SIGILL:
#if CONFIG_RUNTIME_CPUDETECT
mp_msg(MSGT_CPLAYER,MSGL_FATAL,MSGTR_Exit_SIGILL_RTCpuSel);
#else
mp_msg(MSGT_CPLAYER,MSGL_FATAL,MSGTR_Exit_SIGILL);
#endif
case SIGFPE:
case SIGSEGV:
mp_msg(MSGT_CPLAYER,MSGL_FATAL,MSGTR_Exit_SIGSEGV_SIGFPE);
default:
mp_msg(MSGT_CPLAYER,MSGL_FATAL,MSGTR_Exit_SIGCRASH);
#ifdef CONFIG_CRASH_DEBUG
if (crash_debug) {
int gdb_pid;
mp_msg(MSGT_CPLAYER, MSGL_INFO, "Forking...\n");
gdb_pid = fork();
mp_msg(MSGT_CPLAYER, MSGL_INFO, "Forked...\n");
if (gdb_pid == 0) { // We are the child
char spid[20];
snprintf(spid, sizeof(spid), "%i", getppid());
getch2_disable(); // allow terminal to work properly with gdb
if (execlp("gdb", "gdb", prog_path, spid, "-ex", "bt", NULL) == -1)
mp_msg(MSGT_CPLAYER, MSGL_ERR, "Couldn't start gdb\n");
} else if (gdb_pid < 0)
mp_msg(MSGT_CPLAYER, MSGL_ERR, "Couldn't fork\n");
else {
waitpid(gdb_pid, NULL, 0);
}
if (x == SIGTRAP) return;
}
#endif
}
getch2_disable();
exit(1);
}
More information about the MPlayer-users
mailing list