Mailing List
Home
MySQL General - General MySQL discussion
MaxDB - Everything about MaxDB, formerly known as SAP DB
MySQL on Win32 - Runing MySQL on Windows 9x/Me/NT/2000/XP
Java Help - Mostly related to the MySQL Connector/J driver
ODBC - ODBC with the MySQL Connector/ODBC driver
Perl - Perl support for MySQL with DBI and DBD::mysql
MySQL++ - Programming with the C++ API to MySQL
Subjects
mysql openssl Question
mysql:it 's a db not a dbms how it 's possible?!
Does the binary log enabling affect the MySQL performances?
Strange behavior, Table Level Permission
FULLTEXT query format question
Preventing Duplicate Entries
Comparing and writing out BLOBS
Executing MySQL Commands From Within C Program
Can 't access mysql after kernel upgrade
Mysql 4 0 Oracle Stored Procedure Trigger Conversion
Downgrade Mysql from 4 to 3 23
MySQL Cluster Software
mysql test 4 1 fails with the gis test
ERROR 2002: Can 't connect to local MySQL server through socket
Getting Identity after INSERT
Update one field with more fields from another table
ERROR 1045: Access denied for user: 'root@localhost ' (Using
password: NO)
mysql have same function mthod as Oracle decode()
 
Search:  
Power your search with and, or, +, -, or "some phrase" operators.
memory usage probs

memory usage probs

2004-03-20       - By Matthew Hodgson

 Back
Hi,

I 've been having problems with segfaults under mod_auth_mysql in Apache
1.3, which I think i 've narrowed down to the MYSQL connection structure
getting corrupted on my particular mysql installation - specifically
manifesting itself with strange values of the free_me field, which results
in the structure being incorrectly free 'd.

If anyone can confirm that the following shows something fundamentally
wrong with my mysql install i 'd appreciate it hugely:

box 130% cat test.c
#include <mysql/mysql.h >

int main() {
MYSQL *m;

m = mysql_init(0);
printf( "free_me is %d\n ", m- >free_me);

return 0;
}

box 131% gcc -g -L/usr/local/lib/mysql -lmysqlclient -lm -o foo test.c
box 132% ./foo
free_me is 0

This is using libmysqlclient.so.12.0.0 on a P4 Xeon running linux 2.4.22
with libc 2.3.1; mysql 4.0.17 built from source with:

./configure --prefix=/opt/mysql-4.0.17
--localstatedir=/usr/local/var/mysql --without-innodb --without-docs
--without-bench --with-mysqld-user=mysql

The code in libmysql.c appears to say:

mysql_init(MYSQL *mysql) {
if (!mysql) {
<malloc mysql >
mysql- >free_me=1;
}
...
}

so I 'm at a complete loss to explain why m- >free_me appears as 0 in the
above mini example.

Meanwhile, precisely the same program on a dual PIII machine running
Debian Woody, libmysqlclient 12.0.0 to match 4.0.16 yields:

deb 30% ./foo
free_me is 1

Superficially other operations seem to work - but segfaults ensue on
mysql_close(); and gdb reveals several fields of the connection structure
to change radically between simple operations. For instace running a
mysql_select_db() sets the value of free_me to 0x03, amongst others:

freshly inited mysql_handle, populated with some settings:

(gdb) print *mysql_handle
$1 = {net = {vio = 0x84efd30, fd = 139421480, fcntl = 139429672, buff = 0x84f6728 " ", buff_end = 0x84f6728 " ",
write_pos = 0x6 <Address 0x6 out of bounds >, read_pos = 0x2000 <Address 0x2000 out of bounds >,
last_error = "\0\0\0@\0\0\0\0\003\0\0\0\003\0\0\0\2003á\001\2003á\001\001 ", '\0 ' <repeats 174 times >, last_errno = 0, max_packet = 0,
timeout = 0, pkt_nr = 0, error = 0 '\0 ', return_errno = 0 '\0 ', compress = 0 '\0 ', no_send_ok = 0 '\0 ', remain_in_buf = 0, length = 0,
buf_length = 0, where_b = 0, return_status = 0x0, reading_or_writing = 0 '\0 ', save_char = 0 '\0 '}, connector_fd = 0x0, host = 0x0,
user = 0x0, passwd = 0x0, unix_socket = 0x0, server_version = 0x0, host_info = 0x84f01a0 "auth.domain.com ", info = 0x84f01e8 "auth ",
db = 0x84f01f8 "xxxxxxxx ", port = 0, client_flag = 139395520, server_capabilities = 139395456, protocol_version = 0, field_count = 0,
server_status = 1074172704, thread_id = 0, affected_rows = 0, insert_id = 0, extra_info = 0, packet_length = 0, status = MYSQL_STATUS_READY,
fields = 0x0, field_alloc = {free = 0x0, used = 0x0, pre_alloc = 0x0, min_malloc = 0, block_size = 0, error_handler = 0x2f43},
free_me = 0 '\0 ', reconnect = 0 '\0 ', options = {connect_timeout = 3306, client_flag = 8197, compress = 44 ', ', named_pipe = 0 '\0 ',
port = 10, host = 0x0, init_command = 0x2 <Address 0x2 out of bounds >, user = 0x8 <Address 0x8 out of bounds >, password = 0x0,
unix_socket = 0x0, db = 0x0, my_cnf_file = 0x0, my_cnf_group = 0x0, charset_dir = 0x0, charset_name = 0x0, use_ssl = 0 '\0 ',
ssl_key = 0x0, ssl_cert = 0x0, ssl_ca = 0x0, ssl_capath = 0x0}, scramble_buff = "\0\0\0\0\0\0\0\0 ", charset = 0x0, server_language = 0}

(gdb) step
506 if (mysql_select_db(mysql_handle,m- >mysqlDB) != 0) {

(gdb) print *mysql_handle
$2 = {net = {vio = 0x84efd30, fd = 139421480, fcntl = 139429672, buff = 0x84f6728 " ", buff_end = 0x84f6728 " ",
write_pos = 0x6 <Address 0x6 out of bounds >, read_pos = 0x2000 <Address 0x2000 out of bounds >,
last_error = "\0\0\0@\0\0\0\0\002\0\0\0\002\0\0\0\2003á\001\2003á\001\001 ", '\0 ' <repeats 174 times >, last_errno = 0, max_packet = 0,
timeout = 0, pkt_nr = 0, error = 0 '\0 ', return_errno = 0 '\0 ', compress = 0 '\0 ', no_send_ok = 0 '\0 ', remain_in_buf = 0, length = 0,
buf_length = 0, where_b = 0, return_status = 0x0, reading_or_writing = 0 '\0 ', save_char = 0 '\0 '}, connector_fd = 0x0, host = 0x0,
user = 0x0, passwd = 0x0, unix_socket = 0x0, server_version = 0x0, host_info = 0x84f01a0 "auth.domain.com ", info = 0x84f01e8 "auth ",
db = 0x84f01f8 "xxxxxxxx ", port = 0, client_flag = 139395520, server_capabilities = 139395456, protocol_version = 0,
field_count = 139395592, server_status = 1074172704, thread_id = 0, affected_rows = 0, insert_id = 0, extra_info = 0, packet_length = 0,
status = MYSQL_STATUS_READY, fields = 0xffffffff, field_alloc = {free = 0xffffffff, used = 0x0, pre_alloc = 0x0, min_malloc = 0,
block_size = 0, error_handler = 0x2f43}, free_me = 3 '\003 ', reconnect = 0 '\0 ', options = {connect_timeout = 3306, client_flag = 8197,
compress = 44 ', ', named_pipe = 0 '\0 ', port = 10, host = 0x0, init_command = 0x2 <Address 0x2 out of bounds >,
user = 0x8 <Address 0x8 out of bounds >, password = 0x0, unix_socket = 0x0, db = 0x0, my_cnf_file = 0x0, my_cnf_group = 0x0,
charset_dir = 0x0, charset_name = 0x0, use_ssl = 0 '\0 ', ssl_key = 0x0, ssl_cert = 0x0, ssl_ca = 0x0, ssl_capath = 0x0},
scramble_buff = "\0\0\0\0\0\0\0\0 ", charset = 0x0, server_language = 0}


Any ideas would be very much appreciated;

M.

--
matthew@(protected)

--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe: http://lists.mysql.com/mysql?unsub=mysql @(protected)