RESOLVED FIXED 145797
[SOUP] Network Cache: run the IO completion handler in the given queue instead of the whole operation
https://bugs.webkit.org/show_bug.cgi?id=145797
Summary [SOUP] Network Cache: run the IO completion handler in the given queue instea...
Carlos Garcia Campos
Reported 2015-06-09 05:42:57 PDT
I misunderstood what the WorkQueue parameter meant in the IO channel operations. It's the queue where the completion handler should be run, not the whole operation. Since our operations are already non-blocking, we can just run the read/writes in the main thread, and schedule the completion handler in the given work queue when the operation finishes.
Attachments
Patch (10.86 KB, patch)
2015-06-09 05:44 PDT, Carlos Garcia Campos
no flags
Updated patch (11.09 KB, patch)
2015-06-09 08:31 PDT, Carlos Garcia Campos
zan: review+
Carlos Garcia Campos
Comment 1 2015-06-09 05:44:54 PDT
WebKit Commit Bot
Comment 2 2015-06-09 05:46:17 PDT
Attachment 254561 [details] did not pass style-queue: ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:156: Extra space before ( in function call [whitespace/parens] [4] ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:178: Extra space before ( in function call [whitespace/parens] [4] ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:265: Extra space before ( in function call [whitespace/parens] [4] Total errors found: 3 in 2 files If any of these errors are false positives, please file a bug against check-webkit-style.
Zan Dobersek
Comment 3 2015-06-09 06:09:29 PDT
Comment on attachment 254561 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=254561&action=review > Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:119 > + auto asyncData = std::unique_ptr<ReadAsyncData>(asyncDataPtr); This can be just std::unique_ptr<ReadAsyncData> asyncData(asyncDataPtr); Same for the rest of such statements. > Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:188 > + Data data; > + completionHandler(data, -1); You could probably just construct the Data object in the completionHandler call: completionHandler(Data(), -1); > Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:191 > + g_cond_wait(&condition, &mutex); Can this function be called on the main thread, with a null queue? That would schedule the callback in the main context and continue to block the main thread in g_cond_wait(), with the callback never invoked. > Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:223 > g_cond_wait(&condition, &mutex); Same problem here.
Carlos Garcia Campos
Comment 4 2015-06-09 08:24:22 PDT
(In reply to comment #3) > Comment on attachment 254561 [details] > Patch > > View in context: > https://bugs.webkit.org/attachment.cgi?id=254561&action=review > > > Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:119 > > + auto asyncData = std::unique_ptr<ReadAsyncData>(asyncDataPtr); > > This can be just > > std::unique_ptr<ReadAsyncData> asyncData(asyncDataPtr); > > Same for the rest of such statements. Ok, no much difference anyway. > > Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:188 > > + Data data; > > + completionHandler(data, -1); > > You could probably just construct the Data object in the completionHandler > call: > > completionHandler(Data(), -1); No, that doesn't build. no known conversion for argument 1 from ‘WebKit::NetworkCache::Data’ to ‘WebKit::NetworkCache::Data&’ > > Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:191 > > + g_cond_wait(&condition, &mutex); > > Can this function be called on the main thread, with a null queue? No this, is always called from a thread. I'll add an assert to ensure it. > That would schedule the callback in the main context and continue to block > the main thread in g_cond_wait(), with the callback never invoked. > > > Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:223 > > g_cond_wait(&condition, &mutex); > > Same problem here. Yes, we definitely don't want to block the main thread ever.
Carlos Garcia Campos
Comment 5 2015-06-09 08:31:17 PDT
Created attachment 254570 [details] Updated patch
WebKit Commit Bot
Comment 6 2015-06-09 08:34:19 PDT
Attachment 254570 [details] did not pass style-queue: ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:157: Extra space before ( in function call [whitespace/parens] [4] ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:179: Extra space before ( in function call [whitespace/parens] [4] ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:268: Extra space before ( in function call [whitespace/parens] [4] Total errors found: 3 in 2 files If any of these errors are false positives, please file a bug against check-webkit-style.
Zan Dobersek
Comment 7 2015-06-09 08:47:57 PDT
Comment on attachment 254570 [details] Updated patch Looks good.
Carlos Garcia Campos
Comment 8 2015-06-09 10:08:17 PDT
Note You need to log in before you can comment on or make changes to this bug.