Thanks to the help of Sasha Pachev and Robin Keech, the problem has been resolved.
The solution came in three stages: 1) "Downgrading" glibc and glibc-devel to non-RedHat 2.2.4-5 RPMs 2) Ditto for gcc - down to v. 2.95.3 3) And an error on my own: removing some extraneous mysql_free_result() which caused the next call to mysql_store_result() to segfault. Why these did not cause any problems on the test machine is beyond me. / Carsten -- Carsten H. Pedersen keeper and maintainer of the bitbybit.dk MySQL FAQ http://www.bitbybit.dk/mysqlfaq > I'm having some trouble moving a C application from > a test machine to production. The program, which uses > the small wrapper around mysql_query() shown below, runs > flawlessly on the test machine (hours of runtime; tens > of thousands if not a million+ queries). > > On the production machine, the program will execute exactly > 10 queries, then segfault. The 10 queries which are executed > before the fault are a mix of INSERT, DELETE, and SELECTs > which return both empty and non-empty sets. The last query > is a SELECT which returns (well -- is *supposed* to return) > an empty set. > > The problem is twofold: The call to mysql_field_count() > returns 1 (should be 0) and upon reaching the > mysql_store_result() function call, the program segfaults. > > I have tried switching around the two statements (as per the > examples in the docs), to no avail. > > Both machines run RH Linux 7.1, and use GCC 2.96-85 > Test machine: > - MySQL 3.23.39-1 RPM from mysql.com > - glibc-2.2-12 > - kernel v. 2.2 (as included in RH 7.1) > > Production machine: > - MySQL 3.23.43-1 RPM from mysql.com > - glibc-2.2.4-19 > - updated kernel (2.4) > > I've been trying all kinds of up- and downgrades of gcc > and the MySQL packages, different levels of compiler > optimizations, etc., but can't seem to get around this > problem. If anyone has any hint as to what is wrong, I > would appreciate hearing from you. > > [code snippet below] > > / Carsten > > MYSQL_RES *mysql_query_e(char *query, char* message, int lineno) { > int result; > char *errmsg; > MYSQL_RES *resultset; > > // Do the query > if (mysql_query(mysql, query)) { > printf("----------------------------------------\n" > "ERROR: Error when querying database on line %d.\n" > "--\n%s\n\nQuery:\n %s\n\nError message:\n%d: %s\n", > lineno, message, query, mysql_errno(mysql), > mysql_error(mysql)); > fflush(stdout); > exit(2); > } > > // Check whether we should expect any data > if (mysql_field_count(mysql)) { > // On the 11th query... > // ... this line prints "1" where it should say "0": > printf ("%d fields in result\n", mysql_field_count(mysql)); > // ... and the following line segfaults: > resultset = mysql_store_result(mysql); > if (NULL == resultset) { > printf("Error: Could not get result for query on line %d\n" > "--\nExpected %d columns\n" > "%s\n\nQuery:\n %s\n\nError message:\n%d:\n%s\n", > lineno, mysql_field_count(mysql), > message, query, mysql_errno(mysql), > mysql_error(mysql)); > fflush(stdout); > exit(2); > } > // yes, there is data. Return the the result to caller > return resultset; > } > // No data, no columns. That's fine > return NULL; > } > --------------------------------------------------------------------- Before posting, please check: http://www.mysql.com/manual.php (the manual) http://lists.mysql.com/ (the list archive) To request this thread, e-mail <[EMAIL PROTECTED]> To unsubscribe, e-mail <[EMAIL PROTECTED]> Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php