Dont call exit() from the DRI driver, with AIGLX this is particularly nasty
authorBen Skeggs <darktama@iinet.net.au>
Sun, 12 Nov 2006 02:05:40 +0000 (02:05 +0000)
committerBen Skeggs <darktama@iinet.net.au>
Sun, 12 Nov 2006 02:05:40 +0000 (02:05 +0000)
src/mesa/drivers/dri/nouveau/nouveau_context.c
src/mesa/drivers/dri/nouveau/nouveau_fifo.c
src/mesa/drivers/dri/nouveau/nouveau_fifo.h
src/mesa/drivers/dri/nouveau/nouveau_msg.h

index 00f0646b1b61b0321cc4c7c02430a21f9a6eda0d..ff00782c991da2f7587679c68b39728d70e67867 100644 (file)
@@ -79,7 +79,8 @@ GLboolean nouveauCreateContext( const __GLcontextModes *glVisual,
                return GL_FALSE;
 
        /* Create the hardware context */
-       nouveauFifoInit(nmesa);
+       if (!nouveauFifoInit(nmesa))
+          return GL_FALSE;
        nouveauObjectInit(nmesa);
 
        /* Init default driver functions then plug in our nouveau-specific functions
index 5793909705badc9a1c8c930da30dc597de307b13..94d6773d33ac88ea48a5a91e6151c79cabd4e3f5 100644 (file)
@@ -109,19 +109,25 @@ void nouveauWaitForIdle(nouveauContextPtr nmesa)
 }
 
 // here we call the fifo initialization ioctl and fill in stuff accordingly
-void nouveauFifoInit(nouveauContextPtr nmesa)
+GLboolean nouveauFifoInit(nouveauContextPtr nmesa)
 {
        drm_nouveau_fifo_alloc_t fifo_init;
 
        int ret;
        ret=drmCommandWriteRead(nmesa->driFd, DRM_NOUVEAU_FIFO_ALLOC, &fifo_init, sizeof(fifo_init));
-       if (ret)
+       if (ret) {
                FATAL("Fifo initialization ioctl failed (returned %d)\n",ret);
+               return GL_FALSE;
+       }
 
-       if (drmMap(nmesa->driFd, fifo_init.cmdbuf, fifo_init.cmdbuf_size, &nmesa->fifo.buffer))
+       if (drmMap(nmesa->driFd, fifo_init.cmdbuf, fifo_init.cmdbuf_size, &nmesa->fifo.buffer)) {
                FATAL("Unable to map the fifo\n",ret);
-       if (drmMap(nmesa->driFd, fifo_init.ctrl, fifo_init.ctrl_size, &nmesa->fifo.mmio))
+               return GL_FALSE;
+       }
+       if (drmMap(nmesa->driFd, fifo_init.ctrl, fifo_init.ctrl_size, &nmesa->fifo.mmio)) {
                FATAL("Unable to map the control regs\n",ret);
+               return GL_FALSE;
+       }
 
        MESSAGE("Fifo init ok. Using context %d\n", fifo_init.channel);
 }
index c2f8633dccb14fcb782a2b8abac18549f0a81ef9..afe4017d60a9c76bae01e53f01f06677b9ecfc4a 100644 (file)
@@ -113,7 +113,7 @@ extern void WAIT_RING(nouveauContextPtr nmesa,u_int32_t size);
 }while(0)
 
 extern void nouveauWaitForIdle(nouveauContextPtr nmesa);
-extern void nouveauFifoInit(nouveauContextPtr nmesa);
+extern GLboolean nouveauFifoInit(nouveauContextPtr nmesa);
 
 #endif /* __NOUVEAU_FIFO_H__ */
 
index 7b8f89e7745575add7f80bafc3d962f26961effc..5dea2189c7204d4b00eb49eb03e86f94b650c006 100644 (file)
@@ -54,7 +54,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
                        fprintf(stderr, "File %s function %s line %d\n", __FILE__, __FUNCTION__, __LINE__); \
                        fprintf(stderr,  a, ## __VA_ARGS__);\
                        fprintf(stderr, "***************************************************************************\n");\
-                       exit(0);\
                }while(0)
 
 #define FATAL(a, ...) do{\
@@ -62,7 +61,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
                        fprintf(stderr, "File %s function %s line %d\n", __FILE__, __FUNCTION__, __LINE__); \
                        fprintf(stderr,  a, ## __VA_ARGS__);\
                        fprintf(stderr, "***************************************************************************\n");\
-                       exit(0);\
                }while(0)
 
 #endif /* __NOUVEAU_MSG_H__ */