Right now, write errors in LevelDB (e.g. out of disk space) will cause block connection to fail, potentially resulting in that block being marked invalid, and never considered again for connecting.
One possibility is throwing an (uncaught, until top-level) exception when there's a read or write error, causing an exit.