From cc049d7f7cedb20f0b195244a72f64062bae13c6 Mon Sep 17 00:00:00 2001 From: zhengchao Date: Fri, 23 Nov 2018 20:45:12 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0cancel=E7=9A=84=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/src/tfe_future.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/common/src/tfe_future.cpp b/common/src/tfe_future.cpp index 19f20f7..877f209 100644 --- a/common/src/tfe_future.cpp +++ b/common/src/tfe_future.cpp @@ -39,6 +39,7 @@ struct future struct timeval timeout; future_success_cb * cb_success; future_failed_cb * cb_failed; + char is_cancelled; }; struct promise @@ -220,6 +221,10 @@ void future_destroy(struct future * f) { __promise_destroy(p); } + else + { + f->is_cancelled=1; + } } void promise_finish(struct promise * p) { @@ -252,7 +257,10 @@ static void fp_stat_latency(struct _future_promise_debug* debug, int is_success) void promise_failed(struct promise * p, enum e_future_error error, const char * what) { if(!g_FP_instance.no_stats) fp_stat_latency(&p->debug, 0); - p->f.cb_failed(error, what, p->f.user); + if(!p->f.is_cancelled) + { + p->f.cb_failed(error, what, p->f.user); + } if(!p->may_success_many_times) { promise_finish(p); @@ -263,7 +271,10 @@ void promise_failed(struct promise * p, enum e_future_error error, const char * void promise_success(struct promise * p, void * result) { if(!g_FP_instance.no_stats) fp_stat_latency(&p->debug, 1); - p->f.cb_success(result, p->f.user); + if(!p->f.is_cancelled) + { + p->f.cb_success(result, p->f.user); + } if(!p->may_success_many_times) { promise_finish(p);