Mercurial > mplayer.hg
view vidix/sysdep/pci_bsdi.c @ 31672:61eac0d05f20
Use sigaction() instead of signal(), the latter has a unavoidable
race-condition on "broken by backwards-compatibility" systems like Solaris.
(upon receiving a signal, the handler is reset to SIG_DFL, thus a
second signal will kill the process, the problem could also be reduced
by re-installing the handler inside the handler, but there's still a
race-condition and the risk of the handler being called inside the handler).
author | reimar |
---|---|
date | Thu, 15 Jul 2010 18:09:14 +0000 (2010-07-15) |
parents | 502f04b67653 |
children | 958431e2cde0 |
line wrap: on
line source
/* This file is based on: $XFree86: xc/programs/Xserver/hw/xfree86/etc/scanpci.c,v 3.34.2.17 1998/11/10 11:55:40 dawes Exp $ Modified for readability by Nick Kurshev */ #include <errno.h> #include <sys/file.h> #include <sys/ioctl.h> #include <i386/isa/pcconsioctl.h> #ifndef GCCUSESGAS #define GCCUSESGAS #endif static int io_fd; static __inline__ int enable_os_io(void) { io_fd = -1 ; if ((io_fd = open("/dev/console", O_RDWR, 0)) < 0) { perror("/dev/console"); return errno; } if (ioctl(io_fd, PCCONENABIOPL, 0) < 0) { perror("ioctl(PCCONENABIOPL)"); return errno; } return 0; } static __inline__ int disable_os_io(void) { if (ioctl(io_fd, PCCONDISABIOPL, 0) < 0) { perror("ioctl(PCCONDISABIOPL)"); close(io_fd); return errno; } close(io_fd); return 0; }