diff --git a/rts/posix/Select.c b/rts/posix/Select.c
index 013b374d1addc8b8f54a2469a17c1c5cfcaeab01..1edf6bc690232c84696e740e3f7f8cc9856dc9f3 100644
--- a/rts/posix/Select.c
+++ b/rts/posix/Select.c
@@ -218,12 +218,12 @@ awaitEvent(rtsBool wait)
 	       the RTS won't loop.
 	    */
 	    if ( errno == EBADF ) {
-	      unblock_all = rtsTrue;
-	      break;
+                unblock_all = rtsTrue;
+                break;
 	    } else {
- 	      perror("select");
-	      barf("select failed");
-	    }
+                sysErrorBelch("select");
+                stg_exit(EXIT_FAILURE);
+            }
 	  }
 
 	  /* We got a signal; could be one of ours.  If so, we need