summaryrefslogtreecommitdiff
path: root/libmysql/libmysql.c
diff options
context:
space:
mode:
authorunknown <sasha@mysql.sashanet.com>2001-07-13 16:05:19 -0600
committerunknown <sasha@mysql.sashanet.com>2001-07-13 16:05:19 -0600
commit0251108474303747183409ec40e08301164a66aa (patch)
tree2fbeb8537391475516c8653e853e59995489dd6f /libmysql/libmysql.c
parentf024c2e9d384074ddb6720b9cfde97b6baad431a (diff)
downloadmariadb-git-0251108474303747183409ec40e08301164a66aa.tar.gz
fixed coredump in mysql_reconnect()
Diffstat (limited to 'libmysql/libmysql.c')
-rw-r--r--libmysql/libmysql.c19
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);