mysql:3760
From: <takeshi@xxxxxxxxxx>
Date: Wed, 13 Jun 2001 17:35:54 +0900
Subject: [mysql 03760] Re: BDB テーブルの SELECT 結果 0 件で PANIC
At Tue, 12 Jun 2001 14:58:15 +0900, Noriyuki Sakimura wrote: > 複数のBerkeleyDBタイプのテーブルを複数結合して検索するSELECT文を > 実行しようとしているのですが、検索結果が0件になるようなパターンを > 実行すると、初回は0件が返ってきますが、再度実行すると > > ERROR 1015: Can't lock file (errno: -30989) > > が発生し、それ以降mysqldを再起動するまで正常動作しなくなります。この > SQL文で参照していないテーブルも参照できなくなり、ERROR 1016: Can't > open file が発生します。 > > ホスト名.err ログには、初回の実行時に > 010612 13:41:56 bdb: PANIC: Invalid argument > と出力されます。 詳細なレポートがあると助かります。ありがとうございます 以下のパッチでいかがでしょう? 村上 毅 takeshi@xxxxxxxxxx === patch === diff -ru mysql-3.23.38.orig/sql/sql_select.cc mysql-3.23.38/sql/sql_select.cc --- mysql-3.23.38.orig/sql/sql_select.cc Thu May 10 05:34:37 2001 +++ mysql-3.23.38/sql/sql_select.cc Wed Jun 13 17:30:35 2001 @@ -400,7 +400,22 @@ goto err; /* purecov: inspected */ } if (join.const_tables && !thd->locked_tables) + { + TABLE **table, **end; + for (table=join.table, end=table + join.const_tables ; + table != end; + table++) + { + /* BDB tables require that we call index_end() before doing an unlock */ + if ((*table)->key_read) + { + (*table)->key_read=0; + (*table)->file->extra(HA_EXTRA_NO_KEYREAD); + } + (*table)->file->index_end(); + } mysql_unlock_some_tables(thd, join.table,join.const_tables); + } if (!conds && join.outer_join) { /* Handle the case where we have an OUTER JOIN without a WHERE */ @@ -2761,7 +2776,12 @@ if (send_row) result->send_data(fields); if (tables) // Not from do_select() + { + /* Close open cursors */ + for (TABLE_LIST *table=tables; table ; table=table->next) + table->table->file->index_end(); result->send_eof(); // Should be safe + } } DBUG_RETURN(0); }
3755 2001-06-12 14:58 [Noriyuki Sakimura <s] BDB テーブルの SELECT 結果 0 件で PANIC -> 3760 2001-06-13 17:35 ┗[<takeshi@xxxxxxxxxx>] 3762 2001-06-13 19:06 ┗[崎村 典行 <sakimura@]