From: Jürg Billeter Date: Mon, 1 Feb 2010 19:03:38 +0000 (+0100) Subject: GAsync: Support calling async methods that finish immediately X-Git-Tag: 0.7.10~22 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ae233a60fe6d1448deece4c138e39dfeeab8b8b7;p=thirdparty%2Fvala.git GAsync: Support calling async methods that finish immediately Fixes bug 608708. --- 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 ()))); }