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

Reply via email to