December 06, 2004 std.c.stdio FILE * under Linux | ||||
---|---|---|---|---|
| ||||
I've been wrestling with libvorbisfile's C API which requires use of std.c.stdio's old FILE *s. This works fine when I fopen() and then fclose()... However, if I try to fopen() again, the program runs into an infinite loop, and I don't know where since debugging is terrible. I received slightly more success with std.gc.addRoot(my FILE *) after fopen() which got rid of the infinite loop but after 3 iterations of this i got a seg-fault while trying to read from the file. This leads me to believe its a garbage collector issue that is either a) a bug, or b) my fault for not fully understanding what the hell I'm doing :-P. I'll try to write a simple test case to demonstrate what I'm saying here. If you know what I'm trying to get at, please let me know how to work correctly with std.c.stdio and the garbage collector! Regards, James Dunne |
December 06, 2004 Re: std.c.stdio FILE * under Linux | ||||
---|---|---|---|---|
| ||||
Posted in reply to James Dunne | In article <cp0jpm$10r5$1@digitaldaemon.com>, James Dunne says... > > >I've been wrestling with libvorbisfile's C API which requires use of >std.c.stdio's old FILE *s. This works fine when I fopen() and then fclose()... >However, if I try to fopen() again, the program runs into an infinite loop, and >I don't know where since debugging is terrible. > >I received slightly more success with std.gc.addRoot(my FILE *) after fopen() which got rid of the infinite loop but after 3 iterations of this i got a seg-fault while trying to read from the file. This leads me to believe its a garbage collector issue that is either a) a bug, or b) my fault for not fully understanding what the hell I'm doing :-P. > >I'll try to write a simple test case to demonstrate what I'm saying here. > >If you know what I'm trying to get at, please let me know how to work correctly with std.c.stdio and the garbage collector! > >Regards, >James Dunne Yeah, so, I'm a retard. It wasn't apparent that the libvorbisfile took over the FILE * and fclose()'d when i called ov_clear() on its related context. So I was essentially double fclose()-ing the FILE *. Geez... Ignore me. It works fine now :). Regards, James Dunne |
Copyright © 1999-2021 by the D Language Foundation