Index: src/XF86Misc.c
===================================================================
--- src/XF86Misc.c.orig
+++ src/XF86Misc.c
@@ -154,6 +154,8 @@ Bool XF86MiscGetMouseSettings(dpy, mouse
         if (!(mouseinfo->device = Xcalloc(rep.devnamelen + 1, 1))) {
             _XEatData(dpy, (rep.devnamelen+3) & ~3);
             Xfree(mouseinfo->device);
+            UnlockDisplay(dpy);
+            SyncHandle();
             return False;
         }
         _XReadPad(dpy, mouseinfo->device, rep.devnamelen);
@@ -308,6 +310,8 @@ Bool XF86MiscGetFilePaths(dpy, filpaths)
         if (!(filpaths->configfile = Xcalloc(rep.configlen + 1, 1))) {
             _XEatData(dpy, ((rep.configlen+3) & ~3) + ((rep.modulelen+3) & ~3)
 			    + ((rep.loglen+3) & ~3));
+            UnlockDisplay(dpy);
+            SyncHandle();
             return False;
         }
     }
@@ -318,6 +322,8 @@ Bool XF86MiscGetFilePaths(dpy, filpaths)
 			    + ((rep.loglen+3) & ~3));
             if (filpaths->configfile)
 		    Xfree(filpaths->configfile);
+            UnlockDisplay(dpy);
+            SyncHandle();
             return False;
         }
     }
@@ -330,6 +336,8 @@ Bool XF86MiscGetFilePaths(dpy, filpaths)
 		    Xfree(filpaths->configfile);
             if (filpaths->modulepath)
 		    Xfree(filpaths->modulepath);
+            UnlockDisplay(dpy);
+            SyncHandle();
             return False;
         }
     }
@@ -394,6 +402,8 @@ Status XF86MiscPassMessage(dpy, screen, 
     if (rep.mesglen) {
         if (!(*retmsg = Xcalloc(rep.mesglen + 1, 1))) {
             _XEatData(dpy, ((rep.mesglen+3) & ~3));
+            UnlockDisplay(dpy);
+            SyncHandle();
             return BadAlloc;
         }
         _XReadPad(dpy, *retmsg, rep.mesglen);