On 2006-01-04, Krasimir Angelov <[EMAIL PROTECTED]> wrote: >> I use ForeignPtrs everywhere in HDBC to try to make sure that nothing >> like this happens, and also that The Right Thing happens if a database >> handle gets garbage collected without being explicitly closed first. > > I prefer not to rely on ForeignPtrs. It isn't guaranteed that they > will be run. Another problem is that the order in which finalizers are > executed isn't specified. In this case the connection handle can be
Well, yes and no. It would be impossible to garbage collect (and thus finalize) any object for which references to it still exist. Statement handles in HDBC maintain references to the database handle pointers, either directly or indirectly, so I can't see how it is possible for a database handle to be finalized before the statement handle in this situation. > closed before the statement handle. The usage of raw pointers has the > advantage that it is easier for the developer to see that there is a > space leak. The advantage of ForeignPtrs is that it's almost impossible for a space leak to exist in the first place ;-) > I saw that you are using unsafe foreign imports everywhere in > Database.HDBC.PostgreSQL. The trouble with them is that all Haskell > threads will be suspended during the call. Maybe this explains why you > don't see the crash which you saw with HSQL. I still don't know where > was the problem with HSQL. I think you have that backwards, but I'm unsure. According to the FFI spec, section 3.3: "Optionally, an import declaration can specify, after the calling convention, the safety level that should be used when invoking an external entity. A safe call is less efficient, but guarantees to leave the Haskell system in a state that allows callbacks from the external code. In contrast, an unsafe call, while carrying less overhead, must not trigger a callback into the Haskell system." There is no reason for any of these calls to trigger a callback into Haskell, so they can all be imported unsafe for greater efficiency. But it doesn't directly address threads, so I don't know what to make of that. Do you have a reference? -- John -- John Goerzen <[EMAIL PROTECTED]> GPG: 0x8A1D9A1F www.complete.org "Value your freedom, or you will lose it, teaches history. `Don't bother us with politics,' respond those who don't want to learn." _______________________________________________ Haskell mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell
