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 00f0646..ff00782 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 5793909..94d6773 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 c2f8633..afe4017 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 7b8f89e..5dea218 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__ */