From: Nirbhay Choubey Date: May 6 2011 8:26am Subject: bzr commit into mysql-trunk branch (nirbhay.choubey:3373) Bug#11760134 List-Archive: http://lists.mysql.com/commits/136800 X-Bug: 11760134 Message-Id: <201105060826.p468QLJj001117@acsmt356.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0404579875==" --===============0404579875== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///home/nirbhay/Project/mysql/repo/bugs/mysql-trunk.52515/ based on revid:luis.soares@stripped 3373 Nirbhay Choubey 2011-05-06 Bug#11760134 - 52515: mysql sessions are not terminated properly. The mysql command line client was not reacting on closing its controlling terminal. Added windows specific code to handle the console events. Added a handler for the SIGHUP to gracefully shutdown the running statement. Made sure the windows specific code handles correctly Ctrl-C. @ client/mysql.cc Bug#11760134 - 52515: mysql sessions are not terminated properly. Added windows specific code to handle different console events. modified: client/mysql.cc* === modified file 'client/mysql.cc' (properties changed: -x to +x) --- a/client/mysql.cc 2011-03-09 20:54:55 +0000 +++ b/client/mysql.cc 2011-05-06 08:26:00 +0000 @@ -1096,12 +1096,34 @@ static void end_timer(ulong start_time,c static void mysql_end_timer(ulong start_time,char *buff); static void nice_time(double sec,char *buff,bool part_second); extern "C" sig_handler mysql_end(int sig); -extern "C" sig_handler handle_sigint(int sig); +extern "C" sig_handler handle_kill_signal(int sig); #if defined(HAVE_TERMIOS_H) && defined(GWINSZ_IN_SYS_IOCTL) static sig_handler window_resize(int sig); #endif +#ifdef _WIN32 +BOOL windows_ctrl_handler(DWORD fdwCtrlType) +{ + switch (fdwCtrlType) + { + case CTRL_C_EVENT: + case CTRL_BREAK_EVENT: + if (!opt_sigint_ignore) + handle_kill_signal(SIGINT); + /* Indicate that signal has beed handled. */ + return TRUE; + case CTRL_CLOSE_EVENT: + case CTRL_LOGOFF_EVENT: + case CTRL_SHUTDOWN_EVENT: + handle_kill_signal(SIGINT + 1); + } + /* Pass signal to the next control handler function. */ + return FALSE; +} +#endif + + int main(int argc,char *argv[]) { char buff[80]; @@ -1198,11 +1220,17 @@ int main(int argc,char *argv[]) if (!status.batch) ignore_errors=1; // Don't abort monitor +#ifndef _WIN32 if (opt_sigint_ignore) signal(SIGINT, SIG_IGN); else - signal(SIGINT, handle_sigint); // Catch SIGINT to clean up + signal(SIGINT, handle_kill_signal); // Catch SIGINT to clean up signal(SIGQUIT, mysql_end); // Catch SIGQUIT to clean up + signal(SIGHUP, handle_kill_signal); // Catch SIGHUP to clean up +#else + SetConsoleCtrlHandler((PHANDLER_ROUTINE) windows_ctrl_handler, TRUE); +#endif + #if defined(HAVE_TERMIOS_H) && defined(GWINSZ_IN_SYS_IOCTL) /* Readline will call this if it installs a handler */ @@ -1329,16 +1357,17 @@ sig_handler mysql_end(int sig) If query is in process, kill query no query in process, terminate like previous behavior */ -sig_handler handle_sigint(int sig) +sig_handler handle_kill_signal(int sig) { char kill_buffer[40]; MYSQL *kill_mysql= NULL; + const char *reason = sig == SIGINT ? "Ctrl-C" : "Terminal close"; /* terminate if no query being executed, or we already tried interrupting */ /* terminate if no query being executed, or we already tried interrupting */ if (!executing_query || (interrupted_query == 2)) { - tee_fprintf(stdout, "Ctrl-C -- exit!\n"); + tee_fprintf(stdout, "%s -- exit!\n", reason); goto err; } @@ -1346,7 +1375,7 @@ sig_handler handle_sigint(int sig) if (!mysql_real_connect(kill_mysql,current_host, current_user, opt_password, "", opt_mysql_port, opt_mysql_unix_port,0)) { - tee_fprintf(stdout, "Ctrl-C -- sorry, cannot connect to server to kill query, giving up ...\n"); + tee_fprintf(stdout, "%s -- sorry, cannot connect to server to kill query, giving up ...\n", reason); goto err; } @@ -1360,10 +1389,11 @@ sig_handler handle_sigint(int sig) sprintf(kill_buffer, "KILL %s%lu", (interrupted_query == 1) ? "QUERY " : "", mysql_thread_id(&mysql)); - tee_fprintf(stdout, "Ctrl-C -- sending \"%s\" to server ...\n", kill_buffer); + tee_fprintf(stdout, "%s -- sending \"%s\" to server ...\n", + reason, kill_buffer); mysql_real_query(kill_mysql, kill_buffer, (uint) strlen(kill_buffer)); mysql_close(kill_mysql); - tee_fprintf(stdout, "Ctrl-C -- query aborted.\n"); + tee_fprintf(stdout, "%s -- query aborted.\n", reason); return; --===============0404579875== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/nirbhay.choubey@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: nirbhay.choubey@stripped\ # 3ug6glzno5gv4pr3 # target_branch: file:///home/nirbhay/Project/mysql/repo/bugs/mysql-\ # trunk.52515/ # testament_sha1: aa89a53f07441a118dd5d32236a315d5475f3957 # timestamp: 2011-05-06 13:56:04 +0530 # base_revision_id: luis.soares@stripped\ # kwcglio0a1vwaxws # # Begin bundle IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWctG5z4AAs7fgFIYen/////v 34S////6YAcN97t3tfb7mq9c+3tPvYoegBRwaEaKaamjaQaGRtNQGgzSaD1A9IAaNG0RoMkEGFNp oFNqR6mnpNPKaaep6jQBoAAAAGo0T0E0U9TyQeoDTEaaAAZGQMjRoaDCDEhNI0yQyA9TNQ0aDQAA AAAAAbUlMmmU/VPCj1MhoDTQaaGgGgyGgAAAJIggASMQn6Io8ZEGUwhkaYIZBhA9RWmJzIkLCKxa 0kaYnVmkFxWB7xou4Km2UCfYzxOfnQUo661TxsneS4qEhNArN0TWEI+piAY2SacnE7dsusqiY5TD 0yrnfjJC6WQtLAFIERhBEMu/r737WcJ8/X4D6A7Ls3/G4kgDZ9CBcV2FGsmFSoQCpu1PAup6jGSq ZkasZAt0K8G6r/VcdeQhbChZbB2XcybNt8NoY4Yyc8hZuC3r5k0YSeggGvz6ef53PdcnHL/jePlO ULdxY6vorjMvfoPRMYigDEuk0GmDWkiEi0EYVUlKCafUEFnHK0OUch6+aIb4dfRbDPDqt5Nv0gAk wNJnQ0rBuG4jAhmInICDDcwUVlzeqFxU3JvlWbiwLuIKtJnXZNUG0GDv8Z/AIfmDymwcT233HE7J 1Iiahqrc6Q7A0DYoNk8h5MwJ5cWYuJ99NLNHHapqiVDI2t10ECHQXmRCWoSqQiGkGbhNo0uM7oM0 7jimKskEVvUXXfWwmdGcgvizJ5mqidV7FdEjECcMckU7MxlgiAuQQkWTU2+6TYoGhARvOg2Rp54S PHoGvLXtzONAzlDk0ULLDm+7FSlqc8EIJsasUJaXoVDIHhyFE3TpA69kxVZCgwwKseC2+hUzrDL3 lVEixghBPNibYE3tvdbHMx0eDIzBYIiaOK4KcyKL4XqE2KFNSq1qae1aLL+ANv/YtNbE7rqHQaSl OuKgzqi644XVMRaxWLEJUabuQX92nSdZfPIKVEIDWLQAqxh0pMzYVhoqXuBrpovpUxEZHQCqDOam RnAMUj+Kshr0qSJgA6RrzfXsUikbAhclZkIBRVounxYsNLHyOpqKRQtek757iH0DCdYkoQhiQVeS 0zRgi4OCe9i9opg0oEIrdxkRtIJDOE+4sFuZYLZaFfX2XS3jnE0d3hZMyRR+oUi/Qn2CEjYe0v8P yW1MlAoV+Uh31CCw5dTIAEnyE64YAzCJpCCil6aHk2IiiIWgOZD832w3tW6OByjVVIiSCLmsoFIQ IEyBKjJEDjz0mBsCy5Fo+PLX6Pkxksf7xszle1RhYbQ9AYE4JEMwQXCwKCN7AJSm6cBibsm62inT bP4GRDSzHgLz0+c4CgOEF7WuqI/bpQuhlobVoMkexR800Vo8tcm5iV5fXKpUAeL0+oqwMO4ByWgD fA8vuXi7F+rCONPSikWK3imRFblFPJJSWDLrRtWCyRVGBQGCl1DEQBOTkRGSVrQQDIDoQkzMgPtm cRLtOJdpwN4chvUI3qjri65zQ/d4E6A/NcaHRzq+2w1ar+l0NS3CDFRKuMIEZwwJIWJrl4uLRGHs lhQcHVXhLJoOhgKgvwgOjBZP+min6rCBS8c84B0xo7OBqjsjyq/dTvbX9H9+nByi3UFks2qQisYB IZStU131s2kc8AGeMArVWDPQJAuuJ0jAxxWLbtAoqWokHKtEzbvXXmRjsr9eFtYfXI1MH+25NTHQ OoeAGrhKQqRxhMYC7Xl0rqFAFCrIUg09z8gTPH/jpYhlOFOsBlzMW8vho8zJXalYhUu0Fy8i6Xu4 /JkDXqqg4Op1entAKders34o2OBacXWAWBzkSxnbZXdRy8YsyAVr6UKS5yADzPJmYAc2+2+/Ku3w puLx53t2LUtbWmYjfyLGfV0eR8IDxYCsg7I6Ax0BRRFc9Kiwwtkqyl2ySG6IuRFEZA7rKjUr+2fK yVWwqMKrlyvgWipETbvRV0aSwiEpk5F6b26l8J01O5rqPiEUErhDWMSyZw3fDFRQERbaqYAXxvMB sem6pq+UWFpW0xXXDCZDJnHQ6lhpQQT0CzWtaR0zoVcETRZFxjvsph7qu5IsDYrYqizb0ULYUBu4 GArEaVtrDg4mYIHMRVK4VdT27haAsLKfD4arEEypZ5oal0pibOCS1YAOpmD1fJl0510AR3ZTgS67 w3qGaTFqZFxBTmpKTRpgoWu53BmX0SfhtUImS7ygqZEpkdlKK5rHJgbc2S8ChtRaFBegFUgIjIss FqdBuMiH7NiSWeoQG4AoaPaE0OYYk6MYeJokeh55g4RlZAozadRTSOEHixnqtGhwQ7ibmdoTgJr6 sTFSQXBQupER1ni5SyfQfiFgHH2G31Ehc+hblaZLI1FoZddQmWSnUaoclzGQn75sDhS7kukMKyX+ B4Z4zV50z3DlUB2aQhX1KeNXhKAojuFgT0SXcq6zf4u5IpwoSGWjc58A --===============0404579875==--