Slave_Request *dependency;
Eina_List *dependents; /* list of requests that depend on this one finishing */
Eina_Bool locked : 1; /* locked waiting for a dependency request to finish */
+ Eina_Bool cancelled : 1;
};
struct _Waiter
free(req);
}
-
+ else if (!req->waiters)
+ req->cancelled = EINA_TRUE;
}
void
_request_dependents_cancel(req, err);
if (req->processing)
- return;
+ {
+ req->cancelled = EINA_TRUE;
+ return;
+ }
if (req->dependency)
req->dependency->dependents = eina_list_remove(
Msg_Base *resp = NULL;
int resp_size;
+ if (req->cancelled)
+ goto free_it;
+
if (cmd == ERROR)
{
Error_Type *err = msg;
free(resp);
+free_it:
req->funcs->msg_free(req->msg, req->data);
+
// FIXME: We shouldn't free this message directly, it must be freed by a
// callback.
free(msg);