]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
GAsync: Support calling async methods that finish immediately
authorJürg Billeter <j@bitron.ch>
Mon, 1 Feb 2010 19:03:38 +0000 (20:03 +0100)
committerJürg Billeter <j@bitron.ch>
Mon, 1 Feb 2010 19:03:38 +0000 (20:03 +0100)
Fixes bug 608708.

codegen/valaccodemethodcallmodule.vala

index d97b4cf160e8b0b75901783e113657224e7dcfff..5c9e3c6ea70a3fc6acb14217b1573cef95189156 100644 (file)
@@ -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 ())));
                }