コード例 #1
0
static void pvr2_context_destroy(struct pvr2_context *mp)
{
	if (mp->hdw) pvr2_hdw_destroy(mp->hdw);
	pvr2_trace(PVR2_TRACE_STRUCT,"Destroying pvr_main id=%p",mp);
	flush_workqueue(mp->workqueue);
	destroy_workqueue(mp->workqueue);
	kfree(mp);
}
コード例 #2
0
ファイル: pvrusb2-context.c プロジェクト: 274914765/C
static void pvr2_context_destroy(struct pvr2_context *mp)
{
    pvr2_trace(PVR2_TRACE_CTXT,"pvr2_context %p (destroy)",mp);
    if (mp->hdw) pvr2_hdw_destroy(mp->hdw);
    pvr2_context_set_notify(mp, 0);
    mutex_lock(&pvr2_context_mutex);
    if (mp->exist_next) {
        mp->exist_next->exist_prev = mp->exist_prev;
    } else {
        pvr2_context_exist_last = mp->exist_prev;
    }
    if (mp->exist_prev) {
        mp->exist_prev->exist_next = mp->exist_next;
    } else {
        pvr2_context_exist_first = mp->exist_next;
    }
    if (!pvr2_context_exist_first) {
        /* Trigger wakeup on control thread in case it is waiting
           for an exit condition. */
        wake_up(&pvr2_context_sync_data);
    }
    mutex_unlock(&pvr2_context_mutex);
    kfree(mp);
}
コード例 #3
0
static void pvr2_context_destroy(struct pvr2_context *mp)
{
	pvr2_trace(PVR2_TRACE_CTXT,"pvr2_context %p (destroy)",mp);
	if (mp->hdw) pvr2_hdw_destroy(mp->hdw);
	pvr2_context_set_notify(mp, 0);
	mutex_lock(&pvr2_context_mutex);
	if (mp->exist_next) {
		mp->exist_next->exist_prev = mp->exist_prev;
	} else {
		pvr2_context_exist_last = mp->exist_prev;
	}
	if (mp->exist_prev) {
		mp->exist_prev->exist_next = mp->exist_next;
	} else {
		pvr2_context_exist_first = mp->exist_next;
	}
	if (!pvr2_context_exist_first) {
		/*                                                       
                            */
		wake_up(&pvr2_context_sync_data);
	}
	mutex_unlock(&pvr2_context_mutex);
	kfree(mp);
}