Index: driver/handle.c
===================================================================
--- driver/handle.c     (Revision 488)
+++ driver/handle.c     (Arbeitskopie)
@@ -424,7 +424,18 @@
         MYODBCDbgReturnReturn( SQL_SUCCESS );

     if (!stmt->fake_result)
+    {
       mysql_free_result(stmt->result);
+      /* check if there are more resultsets */
+      while(mysql_more_results(&stmt->dbc->mysql))
+      {
+        if (mysql_next_result(&stmt->dbc->mysql) == -1)
+        {
+          stmt->result = mysql_store_result(&stmt->dbc->mysql);
+          mysql_free_result(stmt->result);
+        }
+      }
+    }
     else
       x_free((gptr)stmt->result);
     x_free((gptr) stmt->fields);
Index: test/my_result.c
===================================================================
--- test/my_result.c    (Revision 488)
+++ test/my_result.c    (Arbeitskopie)
@@ -1717,7 +1717,31 @@
   return OK;
 }

+DECLARE_TEST(t_bug27544)
+{
+  SQLRETURN rc;
+  ok_sql(hstmt, "DROP TABLE IF EXISTS t1");
+  ok_sql(hstmt, "CREATE TABLE t1(a int)");
+  ok_sql(hstmt, "INSERT INTO t1 VALUES (1)");

+  ok_sql(hstmt, "DROP PROCEDURE IF EXISTS p1");
+  ok_sql(hstmt, "CREATE PROCEDURE p1() BEGIN"
+                "   SELECT a FROM t1; "
+                "END;");
+
+
+
+  rc = tmysql_exec(hstmt,"CALL p1()");
+  mystmt(hstmt,rc);
+  ok_stmt(hstmt, SQLFreeStmt(hstmt, SQL_CLOSE));
+
+
+  ok_sql(hstmt, "DROP PROCEDURE p1");
+  ok_sql(hstmt, "DROP TABLE t1");
+
+  return OK;
+}
+
 BEGIN_TESTS
   ADD_TEST(my_resultset)
   ADD_TEST(t_convert_type)
@@ -1736,6 +1760,7 @@
   ADD_TEST(t_exfetch)
   ADD_TEST(tmysql_rowstatus)
   ADD_TEST(t_true_length)
+  ADD_TEST(t_bug27544)
 END_TESTS

