3 <title>Writer starvation
</title>
4 <link rel=
"author" href=
"mailto:odinho@opera.com" title=
"Odin Hørthe Omdal">
5 <meta name=timeout content=long
>
6 <script src=../../../resources/testharness.js
></script>
7 <script src=../../../resources/testharnessreport.js
></script>
8 <script src=support.js
></script>
11 var db
, read_request_count
= 0, read_success_count
= 0;
12 var write_request_count
= 0, write_success_count
= 0;
15 var open_rq
= createdb(async_test(undefined, {timeout
: 20000}));
16 open_rq
.onupgradeneeded = function(e
) {
18 db
.createObjectStore("s")
22 open_rq
.onsuccess = function(e
) {
23 var i
= 0, continue_reading
= true;
25 /* Pre-fill some read requests */
26 for (i
= 0; i
< RQ_COUNT
; i
++)
33 .onsuccess
= this.step_func(function(e
) {
35 assert_equals(e
.target
.transaction
.mode
, "readonly");
47 .onsuccess
= this.step_func(function(e
)
50 assert_equals(e
.target
.transaction
.mode
, "readonly");
52 if (read_success_count
>= RQ_COUNT
&& write_request_count
== 0)
54 write_request_count
++;
56 db
.transaction("s", "readwrite")
58 .add("written", read_request_count
)
59 .onsuccess
= this.step_func(function(e
)
61 write_success_count
++;
62 assert_equals(e
.target
.transaction
.mode
, "readwrite");
63 assert_equals(e
.target
.result
, read_success_count
,
64 "write cb came before later read cb's")
67 /* Reads done after the write */
68 for (i
= 0; i
< 5; i
++)
75 .onsuccess
= this.step_func(function(e
)
83 if (read_success_count
< RQ_COUNT
+ 5)
84 setTimeout(this.step_func(loop
), write_request_count
? 1000 : 100);
86 // This is merely a "nice" hack to run finish after the last request is done
90 .onsuccess
= this.step_func(function()
92 setTimeout(this.step_func(finish
), 100);
99 assert_equals(read_request_count
, read_success_count
, "read counts");
100 assert_equals(write_request_count
, write_success_count
, "write counts");