[PATCH 3/5] xfree86: Convert some xf86BlockSIGIO to OsBlockSignals

Adam Jackson ajax at redhat.com
Thu Dec 16 12:31:38 PST 2010


The DDC1 and int10 code are blocking SIGIO to get some assurance that
their usleep() calls take as long as they expect.  That's a good start
but you really want to be blocking more than just SIGIO, SIGALRM too at
minimum.

At this point, except for SIGIO handler setup itself, BlockSIGIO really
means "block input events".

Signed-off-by: Adam Jackson <ajax at redhat.com>
---
 hw/xfree86/ddc/ddc.c           |   11 ++++-------
 hw/xfree86/int10/helper_exec.c |    5 +++--
 2 files changed, 7 insertions(+), 9 deletions(-)

diff --git a/hw/xfree86/ddc/ddc.c b/hw/xfree86/ddc/ddc.c
index 7c7dc9c..179f42c 100644
--- a/hw/xfree86/ddc/ddc.c
+++ b/hw/xfree86/ddc/ddc.c
@@ -235,15 +235,12 @@ EDIDRead_DDC1(ScrnInfoPtr pScrn, DDC1SetSpeedProc DDCSpeed,
  * @return NULL if no monitor attached or failure to interpret the EDID.
  */
 xf86MonPtr
-xf86DoEDID_DDC1(
-    int scrnIndex, DDC1SetSpeedProc DDC1SetSpeed, 
-    unsigned int (*DDC1Read)(ScrnInfoPtr)
-)
+xf86DoEDID_DDC1(int scrnIndex, DDC1SetSpeedProc DDC1SetSpeed, 
+		unsigned int (*DDC1Read)(ScrnInfoPtr))
 {
     ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
     unsigned char *EDID_block = NULL;
     xf86MonPtr tmp = NULL;
-    int sigio;
     /* Default DDC and DDC1 to enabled. */
     Bool noddc = FALSE, noddc1 = FALSE;
     OptionInfoPtr options;
@@ -259,9 +256,9 @@ xf86DoEDID_DDC1(
     if (noddc || noddc1)
 	return NULL;
     
-    sigio = xf86BlockSIGIO();
+    OsBlockSignals();
     EDID_block = EDIDRead_DDC1(pScrn,DDC1SetSpeed,DDC1Read);
-    xf86UnblockSIGIO(sigio);
+    OsReleaseSignals();
 
     if (EDID_block){
 	tmp = xf86InterpretEDID(scrnIndex,EDID_block);
diff --git a/hw/xfree86/int10/helper_exec.c b/hw/xfree86/int10/helper_exec.c
index 55ab058..b9af473 100644
--- a/hw/xfree86/int10/helper_exec.c
+++ b/hw/xfree86/int10/helper_exec.c
@@ -75,13 +75,14 @@ setup_int(xf86Int10InfoPtr pInt)
     if (pInt->Flags & SET_BIOS_SCRATCH)
 	SetResetBIOSVars(pInt, TRUE);
 #endif
-    return xf86BlockSIGIO();
+    OsBlockSignals();
+    return 0;
 }
 
 void
 finish_int(xf86Int10InfoPtr pInt, int sig)
 {
-    xf86UnblockSIGIO(sig);
+    OsReleaseSignals();
     pInt->ax = (CARD32) X86_EAX;
     pInt->bx = (CARD32) X86_EBX;
     pInt->cx = (CARD32) X86_ECX;
-- 
1.7.3.2



More information about the xorg-devel mailing list