Key: |
QB-2006
|
Type: |
Bug
|
Status: |
Resolved
|
Resolution: |
Fixed
|
Priority: |
Major
|
Assignee: |
Unassigned
|
Reporter: |
AlSt
|
Votes: |
0
|
Watchers: |
1
|
If you were logged in you would be able to see more operations.
|
|
|
QuickBuild
Created: 02/Apr/14 09:44 AM
Updated: 03/Apr/14 04:07 AM
|
|
Component/s: |
None
|
Affects Version/s: |
5.1.18
|
Fix Version/s: |
5.1.19
|
|
Original Estimate:
|
Unknown
|
Remaining Estimate:
|
Unknown
|
Time Spent:
|
Unknown
|
File Attachments:
|
1.
threaddump.txt (2.75 Mb)
|
Image Attachments:
|
|
|
Quickbuild gets blocked by h2 Engine and is not usable anymore. Seems there is a bug in the h2 version Quickbuild is using.
|
Description
|
Quickbuild gets blocked by h2 Engine and is not usable anymore. Seems there is a bug in the h2 version Quickbuild is using. |
Show » |
|
In the Engine code I discovered this for 1.3.167 (which is a bit newer as the used 1.3.159 which i call 1.5.159 in my previous comment by mistake):
while (true) {
session = openSession(ci, ifExists, cipher);
if (session != null) {
break;
}
// we found a database that is currently closing
// wait a bit to avoid a busy loop (the method is synchronized)
try {
Thread.sleep(1);
} catch (InterruptedException e) {
// ignore
}
}
So if session always returns null (and it seems that's the case) It blocks the object forever as the method is synchronized.
In version 1.3.174:
for (int i = 0;; i++) {
session = openSession(ci, ifExists, cipher);
if (session != null) {
break;
}
// we found a database that is currently closing
// wait a bit to avoid a busy loop (the method is synchronized)
if (i > 60 * 1000) {
// retry at most 1 minute
throw DbException.get(ErrorCode.DATABASE_ALREADY_OPEN_1, "Waited for database closing longer than 1 minute");
}
try {
Thread.sleep(1);
} catch (InterruptedException e) {
// ignore
}
}