实现cancel的逻辑。

This commit is contained in:
zhengchao
2018-11-23 20:45:12 +08:00
parent 5d20a52552
commit cc049d7f7c

View File

@@ -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);