From 1f7598245af7e73b34130a44fbaac230e29d7aad Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Thu, 6 Nov 2003 04:48:06 +0000 Subject: Return EBUSY when attempting to addmap a DRM_SHM area with a lock in it if dev->lock.hw_lock is already set. This fixes the case of two X Servers running on the same head on different VTs with interface 1.1, by making the 2nd head fail to inizialize like before. --- bsd-core/drm_bufs.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'bsd-core/drm_bufs.c') diff --git a/bsd-core/drm_bufs.c b/bsd-core/drm_bufs.c index 0dc923d7..0915da84 100644 --- a/bsd-core/drm_bufs.c +++ b/bsd-core/drm_bufs.c @@ -136,6 +136,16 @@ int DRM(addmap)( DRM_IOCTL_ARGS ) } map->offset = (unsigned long)map->handle; if ( map->flags & _DRM_CONTAINS_LOCK ) { + /* Prevent a 2nd X Server from creating a 2nd lock */ + DRM_LOCK(); + if (dev->lock.hw_lock != NULL) { + DRM_UNLOCK(); + DRM(free)(map->handle, map->size, + DRM_MEM_SAREA); + DRM(free)(map, sizeof(*map), DRM_MEM_MAPS); + return DRM_ERR(EBUSY); + } + DRM_UNLOCK(); dev->lock.hw_lock = map->handle; /* Pointer to lock */ } break; -- cgit v1.2.3