After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 683403 - weird recursion in downloader_fetch_os_logo()
weird recursion in downloader_fetch_os_logo()
Status: RESOLVED FIXED
Product: gnome-boxes
Classification: Applications
Component: general
unspecified
Other Linux
: Normal normal
: --
Assigned To: GNOME Boxes maintainer(s)
GNOME Boxes maintainer(s)
Depends on:
Blocks:
 
 
Reported: 2012-09-05 11:05 UTC by Marc-Andre Lureau
Modified: 2016-03-31 14:00 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
downloader: Loop instead of recursing (3.48 KB, patch)
2012-09-24 21:20 UTC, Zeeshan Ali
committed Details | Review

Description Marc-Andre Lureau 2012-09-05 11:05:42 UTC
I didn't get a crash there yet, but that backtrace is worrisome

    res=<optimized out>, self=0x16b30e0) at wizard.c:1429
  • #12 g_simple_async_result_complete
    at gsimpleasyncresult.c line 775
  • #13 boxes_downloader_fetch_os_logo_co
    at downloader.c line 692
  • #14 g_simple_async_result_complete
    at gsimpleasyncresult.c line 775
  • #15 boxes_downloader_fetch_os_logo_co
    at downloader.c line 692
  • #16 g_simple_async_result_complete
    at gsimpleasyncresult.c line 775
  • #17 boxes_downloader_fetch_os_logo_co
    at downloader.c line 692
  • #18 g_simple_async_result_complete
    at gsimpleasyncresult.c line 775
  • #19 boxes_downloader_fetch_os_logo_co
    at downloader.c line 692
  • #20 g_simple_async_result_complete
    at gsimpleasyncresult.c line 775
  • #21 boxes_downloader_fetch_os_logo_co
    at downloader.c line 692
  • #22 g_simple_async_result_complete
    at gsimpleasyncresult.c line 775
  • #23 boxes_downloader_fetch_os_logo_co
  • #24 g_simple_async_result_complete
    at gsimpleasyncresult.c line 775
  • #25 boxes_downloader_fetch_os_logo_co
    at downloader.c line 692
  • #26 g_simple_async_result_complete
    at gsimpleasyncresult.c line 775
  • #27 boxes_downloader_fetch_os_logo_co
    at downloader.c line 692
  • #28 g_simple_async_result_complete
    at gsimpleasyncresult.c line 775
  • #29 boxes_downloader_fetch_os_logo_co
    at downloader.c line 692
  • #30 g_simple_async_result_complete
    at gsimpleasyncresult.c line 775
  • #31 boxes_downloader_fetch_os_logo_co
    at downloader.c line 692
  • #32 g_simple_async_result_complete
    at gsimpleasyncresult.c line 775
  • #33 boxes_downloader_fetch_os_logo_co
    at downloader.c line 692
  • #34 g_simple_async_result_complete
    at gsimpleasyncresult.c line 775
  • #35 boxes_downloader_fetch_os_logo_co
    at downloader.c line 692
  • #36 g_simple_async_result_complete
    at gsimpleasyncresult.c line 775
  • #37 boxes_downloader_fetch_os_logo_co
    at downloader.c line 692
  • #38 g_simple_async_result_complete
    at gsimpleasyncresult.c line 775
  • #39 boxes_downloader_fetch_os_logo_co
    at downloader.c line 692
  • #40 g_simple_async_result_complete
    at gsimpleasyncresult.c line 775
  • #41 boxes_downloader_fetch_os_logo_co
    at downloader.c line 692
  • #42 g_simple_async_result_complete
    at gsimpleasyncresult.c line 775
  • #43 boxes_downloader_fetch_os_logo_co
    at downloader.c line 692
  • #44 g_simple_async_result_complete
    at gsimpleasyncresult.c line 775
  • #45 boxes_downloader_download_co
    at downloader.c line 502
  • #46 g_simple_async_result_complete
    at gsimpleasyncresult.c line 775
  • #47 complete_in_idle_cb
    at gsimpleasyncresult.c line 787

Comment 1 Christophe Fergeau 2012-09-05 11:30:48 UTC
There an intentional recursive call to this function, but I don't think it's expected that it gets this long. This is briefly discussed in the review of bug #682573
Comment 2 Zeeshan Ali 2012-09-24 21:20:49 UTC
Created attachment 225107 [details] [review]
downloader: Loop instead of recursing

Vala currently doesn't optimize tail-call recursion and since it has to
unref/free passed arguments after the call in the generated code, its
not exactly tail call in generated code and therefore gcc's
'-foptimize-sibling-calls' can't help us either.
Comment 3 Christophe Fergeau 2012-09-26 12:48:55 UTC
Review of attachment 225107 [details] [review]:

::: src/downloader.vala
@@ +19,3 @@
+        var logo_url = os.logo;
+        if (logo_url != null)
+            return logo_url;

Might be slightly more readable as 

if (os.logo != null)
    return os.logo;

var logo_url = null;
var derived = ....
Comment 4 Zeeshan Ali 2012-09-26 23:53:18 UTC
Comment on attachment 225107 [details] [review]
downloader: Loop instead of recursing

Attachment 225107 [details] pushed as 1b2138b - downloader: Loop instead of recursing