From: Staale Smedseng Date: May 14 2009 1:30pm Subject: bzr commit into mysql-5.1-bugteam branch (staale.smedseng:2884) Bug#43560 List-Archive: http://lists.mysql.com/commits/74050 X-Bug: 43560 Message-Id: <20090514133024.94C12D6A199@atum21.norway.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============5312823841394505817==" --===============5312823841394505817== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///export/home/tmp/ss156133/z/43560-51g/ based on revid:pstoev@stripped 2884 Staale Smedseng 2009-05-14 Bug #43560 client crashes in mysql_stmt_execute/ mysql_stmt_close after connection loss Added test for net->vio != 0 to avoid the SIGSEGV, and setting the proper error code. Also, added some code to correctly associate error state with the statement being executed. This is due to the fact that mysql_reconnect() only relates to statements if auto-reconnect is turned on. modified: libmysql/libmysql.c === modified file 'libmysql/libmysql.c' --- a/libmysql/libmysql.c 2009-03-24 13:58:52 +0000 +++ b/libmysql/libmysql.c 2009-05-14 13:30:16 +0000 @@ -2485,13 +2485,16 @@ static my_bool execute(MYSQL_STMT *stmt, buff[4]= (char) stmt->flags; int4store(buff+5, 1); /* iteration count */ + stmt_clear_error(stmt); res= test(cli_advanced_command(mysql, COM_STMT_EXECUTE, buff, sizeof(buff), (uchar*) packet, length, 1, stmt) || (*mysql->methods->read_query_result)(mysql)); stmt->affected_rows= mysql->affected_rows; stmt->server_status= mysql->server_status; stmt->insert_id= mysql->insert_id; - if (res) + + /* if stmt->last_errno hasn't already been set, use the net error */ + if (res && stmt->last_errno == 0) { set_stmt_errmsg(stmt, net); DBUG_RETURN(1); @@ -2513,6 +2516,7 @@ int cli_stmt_execute(MYSQL_STMT *stmt) ulong length; uint null_count; my_bool result; + my_bool stmt_skip= stmt ? stmt->state != MYSQL_STMT_INIT_DONE : FALSE; if (!stmt->bind_param_done) { @@ -2526,6 +2530,17 @@ int cli_stmt_execute(MYSQL_STMT *stmt) DBUG_RETURN(1); } + if (!net->vio) + { + stmt_clear_error(stmt); + if (mysql_reconnect(mysql) || stmt_skip) /* Reconnect if possible */ + { + /* associate an error with the stmt if not already done */ + if (stmt->last_errno == 0) + set_stmt_errmsg(stmt, net); + DBUG_RETURN(1); + } + } net_clear(net, 1); /* Sets net->write_pos */ /* Reserve place for null-marker bytes */ null_count= (stmt->param_count+7) /8; --===============5312823841394505817== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/staale.smedseng@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: staale.smedseng@stripped # target_branch: file:///export/home/tmp/ss156133/z/43560-51g/ # testament_sha1: 8e22db3b291bc79c5c70c0564e65f64d34cef5b2 # timestamp: 2009-05-14 15:30:24 +0200 # base_revision_id: pstoev@stripped # # Begin bundle IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWT6aYYUAAi1fgFUQeff///en vyC////+UAV7t727zyhc5zoHW6rbZw0IlP1G1JibTJoniJtE0NMg8oA0DINGNIEVPap6nojQYIaA BkNA0ZAGgAaaDICSICVP1Teqe1GU9GmNJqeoDJkGmmQAGgAaCRUyJtCnqn6pjNDSmm9U9TRpoA0e oDTQeoGIAJRACEyYTTRJmjU9FGnpD1DE9TEbUNNBoPSbcwWTH9cefgwxt1Q6fl0mm0rSv+0u7PHI 87UwygzHalrju9mhIxp1uGWnW7Jb7Qsv86YAKQLrNX/Lbpe25qJKQvjPIZmQ5Sk+ANTjVPQrBneO E47jKS1LOd8Ny1clkXTcFbvzkx9cM8Vg+GkGvho6Cv/jQnuo8s+DYK6pVo6ltls6kUxTCJAPMBZS Q4Tm0fzMdAERQkK+AME4qpCKCmpLBs5JmvesS8Ty7eA8G+RJUkUCFaI/ydGHF5ohiARI2M8Oq3BT GI8akvtVFaB9cRTZBGi81YTrwi1RNdnDGejPYmNMU6XdTX+Vlzokd+VZILGug5B07YuBO7mVxEBz iFybCBkeToJZCsREAtKUUjj/C6luipS4LtTrDsXBo62adsi6EsZe2SIvxIoE9YysSrLE5Pv7BtDk F5BYsWCIW2zSCtQJlbJONHDA+m/+6tpOFessE21HIxYysWFAqOPNQCOWjymWMgoX+rmqQNm+UsKp wrRWleB/mgvQnQJ9G6nOWHRJPRkgWm/Yw0BTcjLzQzObytOP1mE54Im8vGyME4Jlj44QXCSNGSB8 fW8s8jC0yyM1KI0gOGiazprdZbhBSTDBaIoyBRxDI1EzESLH0oVCDWzac4xHFRUYZRMiokVmNID8 c2NpQIxKBDl52XGu90Gphdtj2cw3CZal7twuboazD4hnGWNTEDFIrhIM/SsTGC0PBhmDM9EME+3u 1sPXV006HKVLTsopu0NrOutZs2JtcS4yu7tsTV2rQJUklIr4O8dwIGHvJsfhkoCduAekgBzcfozV p1Fgc4HPEtKpttGW3zSrNwVE9JcpQZVYNRnM2xbA8CiZK2HBwbFupcq7zLuPYes1G4meMpWXfYbm 3F6sYWogu4FRojB6iZqTUd3+luLbzMijQcnMI2BITIq+q4zKx2hj7i+oCrzNvPdpfVHBoxYI3ZpP JJ2z+9oXmu205jFQpYRCzMadzEmgvyNrbSdRWB0uOvVRixI4AS3v+9GsQfDfTD3DqcQ3ApEJ5QsN lg1byiqqm9JAUqikZolq4dSfkcdhvKcCI40kTPfxkX3ptxcGJ0+HZxgk/DU1EiItX7jzgY7jDzCV jKwW56Ja7uuTAR9SXzI9YN17JiX84kKH6f7d+Kh1m7qPIEh57wx4u+HB0MzZBUSR8wj+xdUQHFkb /tyac280NoOMeeK+cByKHgmfbyoZEZNEkxhFypAodGKvZ3EEsTxEMmEkdHg+RPDPfsi6I5z5iqwA 29nlYHyTa3kz0GqutWa3Je7eA1kFEidrSQRMqMU185WsMlTTUVFTNMVGEydrDcGYe56OYE0F2+4S cK6EjI6StpaO9CKL7EFrVQTLZP54rEe+7auBtG0YYYKsiqLKb7VqNssOQvN3o0LevBZ94mXLAcWp kTEwac6V5q5DU+GkWOaF97UN4tptVWdp9EcyIijMEzDLQLJB6O7N4PIuIUZDNMpbrA03R8WV9Ly4 2VPAbYKWJ3okNIlOozXYCX3CyGKnxgUJx8WmQYJtrluUxgt8OQB7mb/XcZbvT4mRqYi2mBuPstIi E01PQOU5JAuWgautV4HDofcU8B0sWwYQ1lYA0KMTgoa0SKpO6LjqPZtLpoFkbC6iVpdy8ydXCAFh L7tFJnYJYecTmFmg8xMr1WjI0GgSYyWCqWhica/a6imw0PKV/i7kinChIH00wwo= --===============5312823841394505817==--