diff options
author | unknown <sasha@mysql.sashanet.com> | 2001-07-13 16:05:19 -0600 |
---|---|---|
committer | unknown <sasha@mysql.sashanet.com> | 2001-07-13 16:05:19 -0600 |
commit | 0251108474303747183409ec40e08301164a66aa (patch) | |
tree | 2fbeb8537391475516c8653e853e59995489dd6f /libmysql/libmysql.c | |
parent | f024c2e9d384074ddb6720b9cfde97b6baad431a (diff) | |
download | mariadb-git-0251108474303747183409ec40e08301164a66aa.tar.gz |
fixed coredump in mysql_reconnect()
Diffstat (limited to 'libmysql/libmysql.c')
-rw-r--r-- | libmysql/libmysql.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c index fc39b73ab23..9fe9da416c3 100644 --- a/libmysql/libmysql.c +++ b/libmysql/libmysql.c @@ -1845,6 +1845,23 @@ error: DBUG_RETURN(0); } +/* needed when we move MYSQL structure to a different address */ +static void mysql_fix_pointers(MYSQL* mysql, MYSQL* old_mysql) +{ + MYSQL *tmp, *tmp_prev; + if (mysql->master == old_mysql) + mysql->master = mysql; + if (mysql->last_used_con == old_mysql) + mysql->last_used_con = mysql; + if (mysql->last_used_slave == old_mysql) + mysql->last_used_slave = mysql; + for (tmp_prev = mysql, tmp = mysql->next_slave; + tmp != old_mysql;tmp = tmp->next_slave) + { + tmp_prev = tmp; + } + tmp_prev->next_slave = mysql; +} static my_bool mysql_reconnect(MYSQL *mysql) { @@ -1860,6 +1877,7 @@ static my_bool mysql_reconnect(MYSQL *mysql) } mysql_init(&tmp_mysql); tmp_mysql.options=mysql->options; + tmp_mysql.rpl_pivot = mysql->rpl_pivot; if (!mysql_real_connect(&tmp_mysql,mysql->host,mysql->user,mysql->passwd, mysql->db, mysql->port, mysql->unix_socket, mysql->client_flag)) @@ -1869,6 +1887,7 @@ static my_bool mysql_reconnect(MYSQL *mysql) bzero((char*) &mysql->options,sizeof(mysql->options)); mysql_close(mysql); *mysql=tmp_mysql; + mysql_fix_pointers(mysql, &tmp_mysql); /* adjust connection pointers */ net_clear(&mysql->net); mysql->affected_rows= ~(my_ulonglong) 0; DBUG_RETURN(0); |