##// END OF EJS Templates
fixed Resove method bug when calling it on already cancelled promise
cin -
r130:671f60cd0250 v2
parent child
Show More
@@ -14,7 +14,7 namespace Implab.Diagnostics.Interactive
14 14 TraceForm m_form;
15 15
16 16 SynchronizationContext m_syncGuiThread;
17 readonly Promise<object> m_guiStarted = new Promise<object>();
17 readonly Promise m_guiStarted = new Promise();
18 18
19 19 readonly IPromise m_guiFinished;
20 20 // readonly IPromise m_workerFinished = new Promise<object>();
@@ -30,8 +30,8 namespace Implab.Diagnostics.Interactive
30 30 readonly ManualResetEvent m_pauseEvent = new ManualResetEvent(true);
31 31
32 32 public InteractiveListener(bool global) : base(global) {
33 m_guiFinished = AsyncPool.InvokeNewThread(GuiThread);
34 /*m_workerFinished = */AsyncPool.InvokeNewThread(QueueThread);
33 m_guiFinished = AsyncPool.RunThread(GuiThread);
34 /*m_workerFinished = */AsyncPool.RunThread(QueueThread);
35 35
36 36 m_guiStarted.Join();
37 37 }
@@ -39,12 +39,14 namespace Implab {
39 39 }
40 40 }
41 41
42 protected void BeginSetResult() {
42 protected bool BeginSetResult() {
43 43 if (!BeginTransit()) {
44 44 WaitTransition();
45 45 if (m_state != CANCELLED_STATE)
46 46 throw new InvalidOperationException("The promise is already resolved");
47 return false;
47 48 }
49 return true;
48 50 }
49 51
50 52 protected void EndSetResult() {
@@ -187,6 +187,8 namespace Implab.Parallels {
187 187 public void EnqueueRange(T[] data, int offset, int length) {
188 188 if (data == null)
189 189 throw new ArgumentNullException("data");
190 if (length == 0)
191 return;
190 192 if (offset < 0)
191 193 throw new ArgumentOutOfRangeException("offset");
192 194 if (length < 1 || offset + length > data.Length)
@@ -17,6 +17,7 namespace Implab.Parallels {
17 17 return false;
18 18 m_exclusive = true;
19 19 m_locks = 1;
20 return true;
20 21 }
21 22 }
22 23
@@ -31,7 +32,7 namespace Implab.Parallels {
31 32 return true;
32 33 }
33 34
34 if (m_lock == 0) {
35 if (m_locks == 0) {
35 36 m_exclusive = false;
36 37 m_locks = 1;
37 38 return true;
@@ -302,9 +302,10 namespace Implab {
302 302 T m_result;
303 303
304 304 public virtual void Resolve(T value) {
305 BeginSetResult();
306 m_result = value;
307 EndSetResult();
305 if (BeginSetResult()) {
306 m_result = value;
307 EndSetResult();
308 }
308 309 }
309 310
310 311 public void Reject(Exception error) {
General Comments 0
You need to be logged in to leave comments. Login now