提交 1cba07fa authored 作者: noelgrandin's avatar noelgrandin

Fix corruption resulting from a mix of the "WRITE_DELAY=0" option and "SELECT DISTINCT" queries

上级 8552a872
......@@ -52,6 +52,7 @@ Change Log
</li><li>Fix a NullPointerException when attempting to add foreign key reference to a view.
</li><li>Add sufficient ClientInfo support to our javax.sql.Connection implementation to make WebSphere happy.
</li><li>Issue 482: class LobStorageBackend$LobInputStream does not override the method InputStream.available().
</li><li>Fix corruption resulting from a mix of the "WRITE_DELAY=0" option and "SELECT DISTINCT" queries
</li></ul>
<h2>Version 1.3.172 (2013-05-25)</h2>
......
......@@ -15,6 +15,7 @@ import org.h2.index.Cursor;
import org.h2.index.Index;
import org.h2.index.IndexType;
import org.h2.index.PageBtreeIndex;
import org.h2.message.DbException;
import org.h2.schema.Schema;
import org.h2.table.Column;
import org.h2.table.IndexColumn;
......@@ -152,9 +153,14 @@ public class ResultTempTable implements ResultExternal {
return;
}
try {
table.truncate(session);
Database database = session.getDatabase();
// Need to lock because not all of the code-paths that reach here have already taken this lock,
// notably via the close() paths.
synchronized(session) {
synchronized (database) {
table.truncate(session);
}
}
// This session may not lock the sys table (except if it already has locked it)
// because it must be committed immediately,
// otherwise other threads can not access the sys table.
......@@ -168,7 +174,6 @@ public class ResultTempTable implements ResultExternal {
// the transaction must be committed immediately
sysSession.commit(false);
}
}
} finally {
table = null;
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论