+}
+
+static tdm_error
+_tdm_vblank_cb_timeout_SW(void *user_data)
+{
+ tdm_private_vblank *private_vblank = user_data;
+ tdm_thread_cb_vblank_sw vblank_sw;
+ tdm_error ret;
+
+ TDM_RETURN_VAL_IF_FAIL(tdm_vblank_is_valid(private_vblank), TDM_ERROR_OPERATION_FAILED);
+
+ VIN("timeout_SW -> thread-cb");
+
+ memset(&vblank_sw, 0, sizeof vblank_sw);
+ vblank_sw.base.type = TDM_THREAD_CB_VBLANK_SW;
+ vblank_sw.base.length = sizeof vblank_sw;
+ vblank_sw.base.object_stamp = private_vblank->stamp;
+ vblank_sw.base.data = NULL;
+ vblank_sw.base.sync = 0;
+
+ ret = tdm_thread_cb_call(private_vblank, &vblank_sw.base, 1);
+ TDM_WARNING_IF_FAIL(ret == TDM_ERROR_NONE);