Some great lessons in this post:
* open()/close() (in other words: resource management) are as likely to cause leaks as malloc()/free() (aka memory management)
* Single threaded code can have race conditions
* No single tool (debugger, heap profiler, logging, etc) will be a panacea for troubleshooting production