Thread: libpq block allocated before my malloc handler inits?
I am trying to build a small program with libpq as the interface to a Postgre database. I am using the most current version. My program uses malloc and free hooks to manage memory without having to request memory from the system all the time. I expected that the init function (__malloc_initialize_hook) would run before anything else, but after opening a number of connections to the database with PQconnectdb, my program blows up because of a free which refers to a block of memory that wasn't allocated using my malloc function. My program runs without a hitch if I comment out the PQconnectdb function calls. Is there something that runs before my malloc init function in libpq? If there is, is there a way to make it happen afterwards? Is there a library interface which doesn't have hidden init functions? Please reply to me directly as well as CCing to the list; I haven't subscribed to the list. Thank you very much for your input, Rob Stoddard
rob wrote: > Is there something that runs before my malloc init function in libpq? > If there is, is there a way to make it happen afterwards? Is there a > library interface which doesn't have hidden init functions? I don't see anything in our code that would initialize stealthily. Maybe it's something we're being linked against -- pthread perhaps? OpenSSL? Maybe you'd have more luck if you noted what is libpq doing when this invalid free is called. Perhaps call abort() and get a stack trace from the resulting dump. -- Alvaro Herrera http://www.CommandPrompt.com/ The PostgreSQL Company - Command Prompt, Inc.
rob wrote: > I am trying to build a small program with libpq as the interface to a > Postgre database. I am using the most current version. My program > uses malloc and free hooks to manage memory without having to request > memory from the system all the time. I expected that the init > function (__malloc_initialize_hook) would run before anything else, > but after opening a number of connections to the database with > PQconnectdb, my program blows up because of a free which refers to a > block of memory that wasn't allocated using my malloc function. My > program runs without a hitch if I comment out the PQconnectdb function > calls. I've experienced an openSSL, libpq + other library using SSL bug recently. Do you get the same crash is you explicitly disable SSL in the connection string? sslmode=disable. Thanks Russell
All I am doing at the moment is spawning a pool of threads each with their own database connection. I am using PQconnectdb to create the database connection when the offending block is deallocated (this is largely to answer the other email I got with regards to this). I just tried using sslmode=disable in the connection string, to no avail. It still crashes with an invalid free. Perhaps I should try to compile the database with no SSL in it at all? Would that make any difference? Thanks for the input, Rob Stoddard Russell Smith wrote: > rob wrote: > >> I am trying to build a small program with libpq as the interface to a >> Postgre database. I am using the most current version. My program >> uses malloc and free hooks to manage memory without having to request >> memory from the system all the time. I expected that the init >> function (__malloc_initialize_hook) would run before anything else, >> but after opening a number of connections to the database with >> PQconnectdb, my program blows up because of a free which refers to a >> block of memory that wasn't allocated using my malloc function. My >> program runs without a hitch if I comment out the PQconnectdb function >> calls. >> > I've experienced an openSSL, libpq + other library using SSL bug > recently. Do you get the same crash is you explicitly disable SSL in > the connection string? sslmode=disable. > > Thanks > > Russell >