I am trying the async examples from the GNOME project site. I get the follwoing warning which I don't under stand on how to fix.
async.vala:8.2-8.17: warning: delegates with scope="async" must be owned
Code
async double do_calc_in_bg(double val) throws ThreadError { SourceFunc callback = do_calc_in_bg.callback; double[] output = new double[1]; // Hold reference to closure to keep it from being freed whilst // thread is active. // WARNING HERE ThreadFunc<bool> run = () => { // Perform a dummy slow calculation. // (Insert real-life time-consuming algorithm here.) double result = 0; for (int a = 0; a<100000000; a++) result += val * a; output[0] = result; Idle.add((owned) callback); return true; }; new Thread<bool>("thread-example", run); yield; return output[0];}void main(string[] args) { var loop = new MainLoop(); do_calc_in_bg.begin(0.001, (obj, res) => { try { double result = do_calc_in_bg.end(res); stderr.printf(@"Result: $result\n"); } catch (ThreadError e) { string msg = e.message; stderr.printf(@"Thread error: $msg\n"); } loop.quit(); }); loop.run();}
The warning is pointing at the run
variable inside the async function. Who or what needs to be owned? The reference to the closure?