[Openchrome-devel] Fix XVMC crash on shutdown
Daniel Drake
dsd
Wed Jun 24 03:22:31 PDT 2009
ViaCleanupXVMC() causes a segfault during X shutdown on hardware where Xv
is not supported.
ViaCleanupXVMC() is always called during shutdown and always expects the
pointer values in the viaAdaptPtr array to have some meaningful value.
However, in the non-Xv case, this array will not have been initialized.
Initialize it to NULL in this situation.
The other function that uses this array, viaExitVideo(), already does a NULL
check when working with this array. Add a similar check to ViaCleanupXVMC()
to avoid the segfault.
Index: xf86-video-openchrome-0.2.903/src/via_video.c
===================================================================
--- xf86-video-openchrome-0.2.903.orig/src/via_video.c
+++ xf86-video-openchrome-0.2.903/src/via_video.c
@@ -600,6 +600,7 @@ viaInitVideo(ScreenPtr pScreen)
xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
"[Xv] Unsupported Chipset. X video functionality disabled.\n");
num_adaptors = 0;
+ memset(viaAdaptPtr, 0, sizeof(viaAdaptPtr));
}
DBG_DD(ErrorF(" via_video.c : num_adaptors : %d\n", num_adaptors));
Index: xf86-video-openchrome-0.2.903/src/via_xvmc.c
===================================================================
--- xf86-video-openchrome-0.2.903.orig/src/via_xvmc.c
+++ xf86-video-openchrome-0.2.903/src/via_xvmc.c
@@ -412,6 +412,9 @@ ViaCleanupXVMC(ScrnInfoPtr pScrn, XF86Vi
cleanupViaXvMC(vXvMC, XvAdaptors, XvAdaptorCount);
}
for (i = 0; i < XvAdaptorCount; ++i) {
+ if (!XvAdaptors[i])
+ continue;
+
for (j = 0; j < XvAdaptors[i]->nPorts; ++j) {
viaPortPrivPtr pPriv = XvAdaptors[i]->pPortPrivates[j].ptr;
More information about the Openchrome-devel
mailing list