
On Feb 19, 2009, at 3:41 PM, Don Stewart wrote:
Is the solution written up somewhere so we can point to that next time? :)
Well, the applicability to the community at large is probably minimal, but my misadventure follows... The MySQL C API has "statements" that are associated with a database "connection". You connect to the database, and issue statements to query and manipulate it. The statement encapsulates, basically, the state of iteration through a result set. It turns out that a connection allows only one statement to be active at a time, and that "closing" any statement associated with a connection appears to close all other statements associated with that connection, too. I wrap the MySQL "statement" in a ForeignPtr whose finalizer closes the statement. Which, as it turns out, would close the *next* statement that I'd created on the connection as a side effect. I was incorrectly interpreting I tried to mitigate this surprising effect by 1) making sure that a statement gets finalized as soon as its result set is exhausted, and 2) adding some warnings to the driver docs about this wonderful feature. chris