Hello,

I am experiencing seg faults in seemingly innocent code with MySQL version 4.0.0
and the embedded library, libmysqld.
The fault only happens when calling particular functions, specifically
mysql_ping() and mysql_query().  There might be others, but these are the only
ones I've found so far.

Following is the code:



/*
 * A simple example client, using the embedded MySQL server library
 */

#include <mysql.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>


MYSQL * db_connect();
void db_disconnect(MYSQL *db);
void db_query(MYSQL *db, const char *SQL);


static char *server_groups[] = {
  "test_client_SERVER",
  "server",
  NULL
};


int main( int argc, char **argv) {

  MYSQL *mysqldb;

  mysql_server_init(argc, argv, server_groups);
  mysqldb = db_connect();

   /* grab some server information */

   fprintf ( stderr, "host info: %s\n", mysql_get_host_info(mysqldb) );
   fprintf ( stderr, "server info: %s\n", mysql_get_server_info(mysqldb) );
   fprintf ( stderr, "protocol info: %d\n", mysql_get_proto_info(mysqldb) );

   /* SEGFAULT HAPPENS HERE */
   mysql_ping(mysqldb);

   /* IF I TAKE OUT THE MYSQL_PING, SEGFAULT HAPPENS HERE */
   mysql_query ( mysqldb, "SHOW TABLE STATUS" );

   mysql_close( mysqldb );
   mysql_server_end();

  exit (0);
}


MYSQL *
db_connect() {
  MYSQL *db = mysql_init(NULL);

  if (!db)
    fprintf ( stderr, "mysql_init failed: no memory.\n" );

  fprintf ( stderr, "calling mysql_real_connect(): " );
  if ( ! mysql_real_connect(db, NULL, NULL, NULL, NULL, 0, NULL, 0) )
        fprintf ( stderr, "FAILURE: %s\n", mysql_error(db) );
  else
        fprintf ( stderr, "SUCCESS\n" );

  return db;
}


void db_query(MYSQL *db, const char *SQL) {
   int result;

   fprintf ( stderr, "calling mysql_query(): " );
   result = mysql_query (db, SQL );

   if ( result == 0 ) fprintf ( stderr, "SUCCESS\n" );
   else fprintf ( stderr, "FAILURE: %s\n", mysql_error(db) );

   fprintf ( stderr, "result code: %d\n", result );

}


void db_disconnect(MYSQL *db) {
  mysql_close(db);
}







The client seems to init the database okay, and it seems to connect okay, and it
even gathers information with the mysql_get_server_info, mysql_get_proto_info
and mysql_get_host info calls, but then mysteriously seg faults at the
mysql_ping or the mysql_query.

If anyone can spot any glaring mistakes in the code that might be the cause of
this, please let me know.

I compile the code with the following command:
gcc -g -W -Wall -D_THREAD_SAFE -D_REENTRANT -I/usr/include/mysql mysql.c
-L/usr/lib/mysql -static -lmysqld -lpthread -lz -lcrypt -lnsl -lm -lrt -o mysql


Greg Kurzawa
[EMAIL PROTECTED]
[EMAIL PROTECTED]


---------------------------------------------------------------------
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