It looks like the s2index.cpp code throws "new UserException" while most mongo code like uasserted() throws "UserException" and the higher level try/catch block for each operation cannot handle the former.
Test
c = db.c; c.drop(); c.ensureIndex( { loc:'s2d', x:1 } ); c.save( { loc:[ 0, 0 ] } ); // Should uassert instead of causing process to terminate. c.count( { loc:{ $foo:[ 0, 0 ] } } );
Output
./mongod --help for help and startup options Thu Nov 29 02:47:50.836 [initandlisten] MongoDB starting : pid=23157 port=27017 dbpath=/data/db/ 64-bit host=fedora Thu Nov 29 02:47:50.836 [initandlisten] Thu Nov 29 02:47:50.836 [initandlisten] ** NOTE: This is a development version (2.3.2-pre-) of MongoDB. Thu Nov 29 02:47:50.836 [initandlisten] ** Not recommended for production. Thu Nov 29 02:47:50.836 [initandlisten] Thu Nov 29 02:47:50.836 [initandlisten] db version v2.3.2-pre-, pdfile version 4.5 Thu Nov 29 02:47:50.837 [initandlisten] git version: e4ee5568d96dc08115b88c1d91fbdc07fadd3bf0 Thu Nov 29 02:47:50.837 [initandlisten] build info: Linux fedora 3.3.4-5.fc17.x86_64 #1 SMP Mon May 7 17:29:34 UTC 2012 x86_64 BOOST_LIB_VERSION=1_49 Thu Nov 29 02:47:50.837 [initandlisten] options: {} Thu Nov 29 02:47:50.855 [initandlisten] journal dir=/data/db/journal Thu Nov 29 02:47:50.855 [initandlisten] recover : no journal files present, no recovery needed Thu Nov 29 02:47:50.964 [initandlisten] waiting for connections on port 27017 Thu Nov 29 02:47:50.965 [websvr] admin web console waiting for connections on port 28017 Thu Nov 29 02:47:56.955 [initandlisten] connection accepted from 127.0.0.1:47405 #1 (1 connection now open) Thu Nov 29 02:47:56.970 [conn1] CMD: drop test.c Thu Nov 29 02:47:56.988 [conn1] build index test.c { _id: 1 } Thu Nov 29 02:47:56.990 [conn1] build index done. scanned 0 total records. 0.001 secs Thu Nov 29 02:47:56.990 [conn1] info: creating collection test.c on add index Thu Nov 29 02:47:56.990 [conn1] build index test.c { loc: "s2d", x: 1.0 } Thu Nov 29 02:47:56.992 [conn1] build index done. scanned 0 total records. 0.001 secs Thu Nov 29 02:47:57.015 [conn1] end connection 127.0.0.1:47405 (0 connections now open) Thu Nov 29 02:48:38.491 [initandlisten] connection accepted from 127.0.0.1:47406 #2 (1 connection now open) Thu Nov 29 02:48:38.506 [conn2] CMD: drop test.c Thu Nov 29 02:48:38.525 [conn2] build index test.c { _id: 1 } Thu Nov 29 02:48:38.527 [conn2] build index done. scanned 0 total records. 0.001 secs Thu Nov 29 02:48:38.527 [conn2] info: creating collection test.c on add index Thu Nov 29 02:48:38.527 [conn2] build index test.c { loc: "s2d", x: 1.0 } Thu Nov 29 02:48:38.529 [conn2] build index done. scanned 0 total records. 0.001 secs Thu Nov 29 02:48:38.545 [conn2] Uncaught exception, terminating Thu Nov 29 02:48:38.545 dbexit: Thu Nov 29 02:48:38.545 [conn2] shutdown: going to close listening sockets... Thu Nov 29 02:48:38.545 [conn2] closing listening socket: 7 Thu Nov 29 02:48:38.545 [conn2] closing listening socket: 9 Thu Nov 29 02:48:38.545 [conn2] closing listening socket: 11 Thu Nov 29 02:48:38.545 [conn2] removing socket file: /tmp/mongodb-27017.sock Thu Nov 29 02:48:38.545 [conn2] shutdown: going to flush diaglog... Thu Nov 29 02:48:38.545 [conn2] shutdown: going to close sockets... Thu Nov 29 02:48:38.545 [conn2] shutdown: waiting for fs preallocator... Thu Nov 29 02:48:38.545 [conn2] shutdown: lock for final commit... Thu Nov 29 02:48:38.545 [conn2] shutdown: final commit... Thu Nov 29 02:48:38.550 [conn2] shutdown: closing all files... Thu Nov 29 02:48:38.552 [conn2] closeAllFiles() finished Thu Nov 29 02:48:38.553 [conn2] journalCleanup... Thu Nov 29 02:48:38.553 [conn2] removeJournalFiles Thu Nov 29 02:48:38.553 [initandlisten] now exiting Thu Nov 29 02:48:38.554 dbexit: ; exiting immediately