RESOLVED FIXED 38256
[GTK] Random failure on 'testdownload' unit test
https://bugs.webkit.org/show_bug.cgi?id=38256
Summary [GTK] Random failure on 'testdownload' unit test
Mario Sanchez Prada
Reported 2010-04-28 05:44:38 PDT
It seems that the buildbot is randomly finding problems with the WebKitGTK unit tests related to the WebKitDownload component, mainly because the internal timer in the WebKitDownload object might be, under some obscure circunstances, not properly set to NULL when calling to webkit_download_start(). We need to find a way to make sure no weird things can happen so the unit tests don't randomly fail anymore, at least in this way.
Attachments
Init timer to NULL on instance init (1.66 KB, patch)
2010-04-28 05:53 PDT, Mario Sanchez Prada
no flags
Make sure the set_filename function is called after handling the 'download-requested' signal for the asynchronous test (5.63 KB, patch)
2010-04-28 05:55 PDT, Mario Sanchez Prada
no flags
Init timer to NULL on instance init (1.65 KB, patch)
2010-04-28 06:04 PDT, Mario Sanchez Prada
no flags
Init timer to 0 on instance init (1.65 KB, patch)
2010-04-28 06:14 PDT, Mario Sanchez Prada
no flags
1. Init timer to 0 on instance init (1.65 KB, patch)
2010-05-06 11:31 PDT, Mario Sanchez Prada
xan.lopez: review-
2. Make sure the set_filename function is called after handling the 'download-requested' signal for the asynchronous test (5.71 KB, patch)
2010-05-06 11:32 PDT, Mario Sanchez Prada
xan.lopez: review-
Make sure the set_filename function is called after handling the 'download-requested' signal for the asynchronous test (5.59 KB, patch)
2010-05-13 07:20 PDT, Mario Sanchez Prada
xan.lopez: review-
Make sure the set_filename function is called after handling the 'download-requested' signal for the asynchronous test (6.53 KB, patch)
2010-06-29 04:59 PDT, Mario Sanchez Prada
no flags
Make sure the set_filename function is called after handling the 'download-requested' signal for the asynchronous test (6.50 KB, patch)
2010-06-29 08:19 PDT, Mario Sanchez Prada
no flags
Mario Sanchez Prada
Comment 1 2010-04-28 05:53:50 PDT
Created attachment 54553 [details] Init timer to NULL on instance init This small patch should fix this issue
Mario Sanchez Prada
Comment 2 2010-04-28 05:55:04 PDT
Created attachment 54554 [details] Make sure the set_filename function is called after handling the 'download-requested' signal for the asynchronous test Make sure the set_filename function is called after handling the 'download-requested' signal for the asynchronous test.
Alejandro G. Castro
Comment 3 2010-04-28 05:59:18 PDT
Mario Sanchez Prada
Comment 4 2010-04-28 06:00:22 PDT
(In reply to comment #2) > Created an attachment (id=54554) [details] > Make sure the set_filename function is called after handling the > 'download-requested' signal for the asynchronous test > [...] Sorry for the noise in this duplicated description, and because of forgetting to explain the reason of this one: This second patch is related to the same issue because it could happen, with the current code, that the set_filename () function got called too early in the mainloop, therefore screwing the tests because the 'theDownload' global variable wouldn't be properly set yet. With this modification we ensure the set_filename() function gets called always after handling the download-requested signal, therefore avoiding potential problems. Perhaps this patch should go along with a different bug, but I'm not completely sure about it. if so, please let me know and I'll gladly file a new one.
Mario Sanchez Prada
Comment 5 2010-04-28 06:04:59 PDT
Created attachment 54556 [details] Init timer to NULL on instance init
Mario Sanchez Prada
Comment 6 2010-04-28 06:06:19 PDT
(In reply to comment #5) > Created an attachment (id=54556) [details] > Init timer to NULL on instance init Uploaded a new version using 0 instead of NULL. Sorry for the spam!
Mario Sanchez Prada
Comment 7 2010-04-28 06:14:12 PDT
Created attachment 54557 [details] Init timer to 0 on instance init Ladies and gentlemen! when it seemed it would be impossible to screw it up three times in a row, I did it! :-) New version of the patch with both the ChangeLog and git log message updated accordingly.
Xan Lopez
Comment 8 2010-05-03 02:14:38 PDT
Comment on attachment 54557 [details] Init timer to 0 on instance init AFAIK private instance data is zeroed when created, so if this fixes the crasher there's something really weird going on.
Mario Sanchez Prada
Comment 9 2010-05-03 02:37:36 PDT
(In reply to comment #8) > (From update of attachment 54557 [details]) > AFAIK private instance data is zeroed when created, so if this fixes the > crasher there's something really weird going on. Yes, but anyway explicitly setting that to 0 won't hurt either :-) Anyway, there's something wrong in that test anyway, since something bad could happen if set_filename() got executed prior to the download-requested signal handler, which could also be behind this random behaviour.. If that was the case, the second patch should help.
Mario Sanchez Prada
Comment 10 2010-05-06 11:31:16 PDT
Created attachment 55274 [details] 1. Init timer to 0 on instance init Arrgh!! Today I realized the number of the bug was wrong in the Changelog. New patch then :-$
Mario Sanchez Prada
Comment 11 2010-05-06 11:32:01 PDT
Created attachment 55275 [details] 2. Make sure the set_filename function is called after handling the 'download-requested' signal for the asynchronous test Second patch...
Xan Lopez
Comment 12 2010-05-12 05:02:38 PDT
Comment on attachment 55274 [details] 1. Init timer to 0 on instance init We cannot got this in like this. The ChangeLog message is not useful because you don't explain why are you doing that; you could say it's just for consistency-sake at the very least, although that would be false since we don't really consistently init all private members to zero. Since this does not really fix anything I think we should not get it in unless we stablish some policy about doing this everywhere.
Xan Lopez
Comment 13 2010-05-12 05:04:24 PDT
Comment on attachment 55275 [details] 2. Make sure the set_filename function is called after handling the 'download-requested' signal for the asynchronous test Seems the ChangeLog is hosed in the patch. Also, can you explain there why are you doing what you do?
Mario Sanchez Prada
Comment 14 2010-05-12 23:10:38 PDT
(In reply to comment #12) > (From update of attachment 55274 [details]) > We cannot got this in like this. The ChangeLog message is not useful because you don't explain why are you doing that; you could say it's just for consistency-sake at the very least, although that would be false since we don't really consistently init all private members to zero. > > Since this does not really fix anything I think we should not get it in unless we stablish some policy about doing this everywhere. Fair enough. Your rationale sounds good to me and, on top of that, I don't have any strong reason to ge this in apart than the "feeling" than doing it so would be a good idea. But I'm new to this and of course perhaps it makes no sense at all and, as you say, it wouldn't fix anything anyway, so let's keep things coherent and avoid this one.
Mario Sanchez Prada
Comment 15 2010-05-13 01:22:48 PDT
(In reply to comment #13) > (From update of attachment 55275 [details]) > Seems the ChangeLog is hosed in the patch. What do you mean? > Also, can you explain there why are you doing what you do? Well, as I said in comment #4: "This second patch is related to the same issue because it could happen, with the current code, that the set_filename () function got called too early in the mainloop, therefore screwing the tests because the 'theDownload' global variable wouldn't be properly set yet. With this modification we ensure the set_filename() function gets called always after handling the download-requested signal, therefore avoiding potential problems." So, the point is about making sure things happen in the right moment, instead of trusting the main loop to execute the idle function in the right time.
Mario Sanchez Prada
Comment 16 2010-05-13 07:20:59 PDT
Created attachment 55972 [details] Make sure the set_filename function is called after handling the 'download-requested' signal for the asynchronous test (In reply to comment #15) > (In reply to comment #13) > > (From update of attachment 55275 [details] [details]) > > Seems the ChangeLog is hosed in the patch. > > What do you mean? > > > Also, can you explain there why are you doing what you do? After talking to Xan via IRC I now understand his question was about the problems with the ChangeLog and not the patch itself, so now I'm attaching a new version of the second patch, hopefully a valid one, and non dependant on the first patch, as the other one.
Xan Lopez
Comment 17 2010-06-29 04:45:50 PDT
Comment on attachment 55972 [details] Make sure the set_filename function is called after handling the 'download-requested' signal for the asynchronous test >--- a/WebKit/gtk/ChangeLog >+++ b/WebKit/gtk/ChangeLog >@@ -1,3 +1,21 @@ >+2010-05-06 Mario Sanchez Prada <msanchez@igalia.com> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ [GTK] Random failure on 'testdownload' unit test >+ https://bugs.webkit.org/show_bug.cgi?id=38256 >+ >+ Make sure the set_filename function is called after >+ handling the 'download-requested' signal for the >+ asynchronous test. >+ >+ * tests/testdownload.c: >+ (set_filename): >+ (handle_download_requested_cb): >+ (download_requested_cb): >+ (download_requested_asynch_cb): >+ (test_webkit_download_perform): >+ As commented, it would be nice to add here the explanation in comment #15, since you already wrote it. >+ g_idle_add((GSourceFunc)set_filename, g_strdup(temporaryFilename)); Mmm, do you really need to dup the string? >+ } else { >+ gchar *uri = g_filename_to_uri(temporaryFilename, NULL, NULL); >+ if (uri) >+ webkit_download_set_destination_uri(download, uri); >+ g_free(uri); >+ } > } > >+ GCallback dr_cb = NULL; downloadRequestCallback? or downloadRequestCB? or something not 'dr_cb' :D
Mario Sanchez Prada
Comment 18 2010-06-29 04:59:51 PDT
Created attachment 60009 [details] Make sure the set_filename function is called after handling the 'download-requested' signal for the asynchronous test (In reply to comment #17) > [...] > As commented, it would be nice to add here the explanation in comment #15, since you already wrote it. Done, sorry. > >+ g_idle_add((GSourceFunc)set_filename, g_strdup(temporaryFilename)); > > Mmm, do you really need to dup the string? As the string is gonna be used in a function called "on idle", I'd rather do it this way and then free the string there. I think it's safer. > [...] > >+ GCallback dr_cb = NULL; > > downloadRequestCallback? or downloadRequestCB? or something not 'dr_cb' :D Sure! Done. Attached new patch addressing these issues
Xan Lopez
Comment 19 2010-06-29 05:18:30 PDT
(In reply to comment #18) > > > > Mmm, do you really need to dup the string? > > As the string is gonna be used in a function called "on idle", I'd rather do it this way and then free the string there. I think it's safer. AFAICT the string survives across the whole test, so whether it's used in an idle or not is irrelevant here.
Mario Sanchez Prada
Comment 20 2010-06-29 08:19:25 PDT
Created attachment 60024 [details] Make sure the set_filename function is called after handling the 'download-requested' signal for the asynchronous test (In reply to comment #19) > (In reply to comment #18) > > > > > > Mmm, do you really need to dup the string? > > > > As the string is gonna be used in a function called "on idle", I'd rather do it this way and then free the string there. I think it's safer. > > AFAICT the string survives across the whole test, so whether it's used in an idle or not is irrelevant here. Ok, you convinced me :-) Here you have the new patch then
Xan Lopez
Comment 21 2010-06-30 00:54:38 PDT
Comment on attachment 60024 [details] Make sure the set_filename function is called after handling the 'download-requested' signal for the asynchronous test r=me
WebKit Commit Bot
Comment 22 2010-06-30 01:23:45 PDT
Comment on attachment 60024 [details] Make sure the set_filename function is called after handling the 'download-requested' signal for the asynchronous test Clearing flags on attachment: 60024 Committed r62167: <http://trac.webkit.org/changeset/62167>
WebKit Commit Bot
Comment 23 2010-06-30 01:23:51 PDT
All reviewed patches have been landed. Closing bug.
WebKit Review Bot
Comment 24 2010-06-30 01:55:02 PDT
Note You need to log in before you can comment on or make changes to this bug.