Ver Fonte

msm: synx: Dipatching un-released callbacks during release

This change ensures that any undispatched callbacks are released
while destroying object if handle is not signaled.

Change-Id: I18ee66b9a6ceb390df4d5f5c4f4cd77c5f9f2090
Signed-off-by: Urvesh Rathod <[email protected]>
Urvesh Rathod há 2 anos atrás
pai
commit
888868eca3
1 ficheiros alterados com 5 adições e 2 exclusões
  1. 5 2
      msm/synx/synx_util.c

+ 5 - 2
msm/synx/synx_util.c

@@ -263,10 +263,13 @@ void synx_util_object_destroy(struct synx_coredata *synx_obj)
 	list_for_each_entry_safe(synx_cb,
 		synx_cb_temp, &synx_obj->reg_cbs_list, node) {
 		dprintk(SYNX_ERR,
-			"cleaning up callback of session %pK\n",
+			"dipatching un-released callbacks of session %pK\n",
 			synx_cb->session);
+		synx_cb->status = SYNX_STATE_SIGNALED_CANCEL;
 		list_del_init(&synx_cb->node);
-		kfree(synx_cb);
+		queue_work(synx_dev->wq_cb,
+			&synx_cb->cb_dispatch);
+		dprintk(SYNX_VERB, "dispatched callback for fence %pKn", synx_obj->fence);
 	}
 
 	for (i = 0; i < synx_obj->num_bound_synxs; i++) {