From ae233a60fe6d1448deece4c138e39dfeeab8b8b7 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=BCrg=20Billeter?= Date: Mon, 1 Feb 2010 20:03:38 +0100 Subject: [PATCH] GAsync: Support calling async methods that finish immediately Fixes bug 608708. --- codegen/valaccodemethodcallmodule.vala | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/codegen/valaccodemethodcallmodule.vala b/codegen/valaccodemethodcallmodule.vala index d97b4cf16..5c9e3c6ea 100644 --- a/codegen/valaccodemethodcallmodule.vala +++ b/codegen/valaccodemethodcallmodule.vala @@ -657,10 +657,13 @@ internal class Vala.CCodeMethodCallModule : CCodeAssignmentModule { if (pre_statement_fragment == null) { pre_statement_fragment = new CCodeFragment (); } - pre_statement_fragment.append (new CCodeExpressionStatement (async_call)); + // set state before calling async function to support immediate callbacks int state = next_coroutine_state++; pre_statement_fragment.append (new CCodeExpressionStatement (new CCodeAssignment (new CCodeMemberAccess.pointer (new CCodeIdentifier ("data"), "_state_"), new CCodeConstant (state.to_string ())))); + + pre_statement_fragment.append (new CCodeExpressionStatement (async_call)); + pre_statement_fragment.append (new CCodeReturnStatement (new CCodeConstant ("FALSE"))); pre_statement_fragment.append (new CCodeCaseStatement (new CCodeConstant (state.to_string ()))); } -- 2.47.3