RESOLVED FIXED 86961
[EFL] Check if ecore_x is initialised before calling ecore_x_bell to avoid crash
https://bugs.webkit.org/show_bug.cgi?id=86961
Summary [EFL] Check if ecore_x is initialised before calling ecore_x_bell to avoid crash
Sudarsana Nagineni (babu)
Reported 2012-05-20 04:22:24 PDT
editing/execCommand/paste-and-match-style-event.html crashes on EFL port #0 XBell (dpy=0x0, percent=0) at ../../src/Bell.c:39 39 ../../src/Bell.c: No such file or directory. (gdb) bt #0 XBell (dpy=0x0, percent=0) at ../../src/Bell.c:39 #1 0x00007ffe09f69e45 in ecore_x_bell (percent=<optimized out>) at ecore_x.c:987 #2 0x00007ffe0f27313e in WebCore::systemBeep () at /WebKit/Source/WebCore/platform/efl/SoundEfl.cpp:42 #3 0x00007ffe0e514a6f in WebCore::Editor::copy (this=0x24c0c20) at /WebKit/Source/WebCore/editing/Editor.cpp:1002 #4 0x00007ffe0e524118 in WebCore::executeCopy (frame=0x24c06c0) at /WebKit/Source/WebCore/editing/EditorCommand.cpp:287 #5 0x00007ffe0e5282d1 in WebCore::Editor::Command::execute (this=0x7ffff81e2620, parameter="(null)", triggeringEvent=0x0) at /WebKit/Source/WebCore/editing/EditorCommand.cpp:1690 #6 0x00007ffe0e3f42ac in WebCore::Document::execCommand (this=0x25d1c00, commandName="Copy", userInterface=false, value="(null)") at /WebKit/Source/WebCore/dom/Document.cpp:4472 #7 0x00007ffe0ef3c91b in WebCore::jsDocumentPrototypeFunctionExecCommand (exec=0x7ffdbecd9108) at /WebKit/WebKitBuild/Debug/DerivedSources/WebCore/JSDocument.cpp:2504 #8 0x00007ffdc0362265 in ?? () #9 0x00007ffff81e27e0 in ?? () #10 0x00007ffdc0362f23 in ?? () #11 0x00007ffff81e2760 in ?? () #12 0x00007ffdbe44f6a0 in ?? () #13 0x00000000025cae40 in ?? () #14 0x00007ffff81e27b0 in ?? () #15 0x00007ffdbe3ccdc0 in ?? () #16 0x00007ffe122a6c8d in JSC::Register::Register (this=0x7ffe0a0cd960) at /WebKit/Source/JavaScriptCore/interpreter/Register.h:105 #17 0x00007ffe1240990a in JSC::JITCode::execute (this=0x7ffdbe389558, registerFile=0x25ac518, callFrame=0x7ffdbecd9040, globalData=0x25b5af0) at /WebKit/Source/JavaScriptCore/jit/JITCode.h:127 #18 0x00007ffe12406346 in JSC::Interpreter::executeCall (this=0x25ac500, callFrame=0x7ffdbe42fae0, function=0x7ffdbe3ccdc0, callType=JSC::CallTypeJS, callData=..., thisValue=..., args=...) at /WebKit/Source/JavaScriptCore/interpreter/Interpreter.cpp:1304 #19 0x00007ffe124ba54c in JSC::call (exec=0x7ffdbe42fae0, functionObject=..., callType=JSC::CallTypeJS, callData=..., thisValue=..., args=...) at /WebKit/Source/JavaScriptCore/runtime/CallData.cpp:39 #20 0x00007ffe0ee4b520 in WebCore::JSMainThreadExecState::call (exec=0x7ffdbe42fae0, functionObject=..., callType=JSC::CallTypeJS, callData=..., thisValue=..., args=...) at /WebKit/Source/WebCore/bindings/js/JSMainThreadExecState.h:56 #21 0x00007ffe0ee70baa in WebCore::JSEventListener::handleEvent (this=0x294e940, scriptExecutionContext=0x25d1d30, event=0x250b880) at /WebKit/Source/WebCore/bindings/js/JSEventListener.cpp:133 #22 0x00007ffe0e45fa5a in WebCore::EventTarget::fireEventListeners (this=0x24fdaf0, event=0x250b880, d=0x24fdc28, entry=WTF::Vector of length 1, capacity 1 = {...}) at /WebKit/Source/WebCore/dom/EventTarget.cpp:231 #23 0x00007ffe0e45f8b4 in WebCore::EventTarget::fireEventListeners (this=0x24fdaf0, event=0x250b880) at /WebKit/Source/WebCore/dom/EventTarget.cpp:198 #24 0x00007ffe0e82ce8c in WebCore::DOMWindow::dispatchEvent (this=0x24fdaf0, prpEvent=..., prpTarget=...) at /WebKit/Source/WebCore/page/DOMWindow.cpp:1642 #25 0x00007ffe0e82cc03 in WebCore::DOMWindow::dispatchLoadEvent (this=0x24fdaf0) at /WebKit/Source/WebCore/page/DOMWindow.cpp:1616 ---Type <return> to continue, or q <return> to quit--- #26 0x00007ffe0e3f28bf in WebCore::Document::dispatchWindowLoadEvent (this=0x25d1c00) at /WebKit/Source/WebCore/dom/Document.cpp:3983 #27 0x00007ffe0e3ecdfb in WebCore::Document::implicitClose (this=0x25d1c00) at /WebKit/Source/WebCore/dom/Document.cpp:2445 #28 0x00007ffe0e77d583 in WebCore::FrameLoader::checkCallImplicitClose (this=0x24c0758) at /WebKit/Source/WebCore/loader/FrameLoader.cpp:761 #29 0x00007ffe0e77d339 in WebCore::FrameLoader::checkCompleted (this=0x24c0758) at /WebKit/Source/WebCore/loader/FrameLoader.cpp:707 #30 0x00007ffe0e77d11c in WebCore::FrameLoader::loadDone (this=0x24c0758) at /WebKit/Source/WebCore/loader/FrameLoader.cpp:653 #31 0x00007ffe0e7eed43 in WebCore::CachedResourceLoader::loadDone (this=0x250c620) at /WebKit/Source/WebCore/loader/cache/CachedResourceLoader.cpp:663 #32 0x00007ffe0e7aea5c in WebCore::SubresourceLoader::releaseResources (this=0x25df550) at /WebKit/Source/WebCore/loader/SubresourceLoader.cpp:317 #33 0x00007ffe0e7aa1f2 in WebCore::ResourceLoader::didFinishLoading (this=0x25df550, finishTime=0) at /WebKit/Source/WebCore/loader/ResourceLoader.cpp:298 #34 0x00007ffe0e7ae649 in WebCore::SubresourceLoader::didFinishLoading (this=0x25df550, finishTime=0) at /WebKit/Source/WebCore/loader/SubresourceLoader.cpp:278 #35 0x00007ffe0e7aa967 in WebCore::ResourceLoader::didFinishLoading (this=0x25df550, finishTime=0) at /WebKit/Source/WebCore/loader/ResourceLoader.cpp:435 #36 0x00007ffe0f28b43f in WebCore::readCallback (source=0x24a5ea0, asyncResult=0x24a0920, data=0x25c6960) at /WebKit/Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:864 #37 0x00007ffe08996a99 in async_ready_callback_wrapper (source_object=0x24a5ea0, res=0x24a0920, user_data=0x25c6960) at ginputstream.c:470 #38 0x00007ffe089a90e7 in g_simple_async_result_complete (simple=0x24a0920) at gsimpleasyncresult.c:767 #39 0x00007ffe089a9168 in complete_in_idle_cb_for_thread (_data=0x24d13c0) at gsimpleasyncresult.c:835 #40 0x00007ffe09ff5623 in g_main_dispatch (context=0xffff000000000002) at gmain.c:2539 #41 g_main_context_dispatch (context=0xffff000000000002) at gmain.c:3075 #42 0x00007ffe12b275e1 in _ecore_glib_select__locked (ecore_timeout=0x25f5110, efds=<optimized out>, wfds=<optimized out>, rfds=<optimized out>, ecore_fds=1, ctx=<optimized out>) at ecore_glib.c:171 #43 _ecore_glib_select (ecore_fds=1, rfds=<optimized out>, wfds=<optimized out>, efds=<optimized out>, ecore_timeout=0x25f5110) at ecore_glib.c:205 #44 0x00007ffe12b219ad in _ecore_main_select (timeout=<optimized out>) at ecore_main.c:1419 #45 0x00007ffe12b22445 in _ecore_main_loop_iterate_internal (once_only=0) at ecore_main.c:1835 #46 0x00007ffe12b22727 in ecore_main_loop_begin () at ecore_main.c:906 #47 0x00000000004620c5 in runTest (cTestPathOrURL=0x7ffff81e3770 "/WebKit/LayoutTests/editing/execCommand/paste-and-match-style-event.html") at /WebKit/Tools/DumpRenderTree/efl/DumpRenderTree.cpp:249 #48 0x000000000046223e in runTestingServerLoop () at /WebKit/Tools/DumpRenderTree/efl/DumpRenderTree.cpp:275 #49 0x000000000046288e in main (argc=2, argv=0x7ffff81e48c8) at /WebKit/Tools/DumpRenderTree/efl/DumpRenderTree.cpp:411 (gdb)
Attachments
Patch (3.10 KB, patch)
2012-05-31 03:32 PDT, Chris Dumez
no flags
Patch (3.09 KB, patch)
2012-05-31 03:57 PDT, Chris Dumez
no flags
Patch (3.04 KB, patch)
2012-05-31 04:23 PDT, Chris Dumez
no flags
Patch (4.57 KB, patch)
2012-06-06 04:02 PDT, Chris Dumez
no flags
Patch (2.64 KB, patch)
2012-09-04 04:29 PDT, Alexander Shalamov
no flags
Chris Dumez
Comment 1 2012-05-31 03:05:48 PDT
*** Bug 87945 has been marked as a duplicate of this bug. ***
Chris Dumez
Comment 2 2012-05-31 03:07:16 PDT
ecore_x_init() needs to be called in the ewk_main. Will upload a patch for this.
Chris Dumez
Comment 3 2012-05-31 03:32:46 PDT
Gyuyoung Kim
Comment 4 2012-05-31 03:43:16 PDT
Comment on attachment 145041 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=145041&action=review > Source/WebKit/efl/ewk/ewk_main.cpp:40 > +#ifdef HAVE_ECORE_X Generally, WebKit doesn't puts #ifdef ~ #endif statement in include file list. - http://trac.webkit.org/browser/trunk/Source/WebCore/platform/efl/WidgetEfl.cpp#L49 - http://trac.webkit.org/browser/trunk/Source/WebCore/platform/efl/EflScreenUtilities.cpp#L22
Chris Dumez
Comment 5 2012-05-31 03:53:01 PDT
(In reply to comment #4) > (From update of attachment 145041 [details]) > View in context: https://bugs.webkit.org/attachment.cgi?id=145041&action=review > > > Source/WebKit/efl/ewk/ewk_main.cpp:40 > > +#ifdef HAVE_ECORE_X > > Generally, WebKit doesn't puts #ifdef ~ #endif statement in include file list. > > - http://trac.webkit.org/browser/trunk/Source/WebCore/platform/efl/WidgetEfl.cpp#L49 > - http://trac.webkit.org/browser/trunk/Source/WebCore/platform/efl/EflScreenUtilities.cpp#L22 Gyuyoung, I don't understand because in the 2 examples you provide, #ifdef is used for includes and this is not my code. For the record, I used Source/WebCore/platform/efl/SoundEfl.cpp as reference which does the following: #ifdef HAVE_ECORE_X #include <Ecore_X.h> #endif
Chris Dumez
Comment 6 2012-05-31 03:57:05 PDT
Created attachment 145042 [details] Patch Small fix in #ifdef placement. I'm still keeping the #ifdef for the include though. This is a header that is external to WebKit.
Gyuyoung Kim
Comment 7 2012-05-31 04:10:03 PDT
(In reply to comment #5) > (In reply to comment #4) > > (From update of attachment 145041 [details] [details]) > > View in context: https://bugs.webkit.org/attachment.cgi?id=145041&action=review > > > > > Source/WebKit/efl/ewk/ewk_main.cpp:40 > > > +#ifdef HAVE_ECORE_X > > > > Generally, WebKit doesn't puts #ifdef ~ #endif statement in include file list. > > > > - http://trac.webkit.org/browser/trunk/Source/WebCore/platform/efl/WidgetEfl.cpp#L49 > > - http://trac.webkit.org/browser/trunk/Source/WebCore/platform/efl/EflScreenUtilities.cpp#L22 > > Gyuyoung, I don't understand because in the 2 examples you provide, #ifdef is used for includes and this is not my code. For the record, I used Source/WebCore/platform/efl/SoundEfl.cpp as reference which does the following: > > #ifdef HAVE_ECORE_X > #include <Ecore_X.h> > #endif Look at Internals.cpp file or webkitwebview.cpp. #ifdef ~ #else in include list is independently placed. - http://trac.webkit.org/browser/trunk/Source/WebCore/testing/Internals.cpp#L66 - http://trac.webkit.org/browser/trunk/Source/WebKit/gtk/webkit/webkitwebview.cpp#L117 Though it seems this is not rule, I prefer this to mix #ifdef. In addition, it seems to me WebKit tends to use my suggestion. Of course, this is trivial issue.
Chris Dumez
Comment 8 2012-05-31 04:23:19 PDT
Created attachment 145046 [details] Patch Ok, I think I understood what you meant now. Hopefully, this new patch is what you wanted.
Gyuyoung Kim
Comment 9 2012-05-31 04:30:00 PDT
Comment on attachment 145046 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=145046&action=review > Source/WebKit/efl/ewk/ewk_main.cpp:50 > +#ifdef HAVE_ECORE_X Sorry for my poor comment. This is what I want exactly. > Source/WebKit/efl/ewk/ewk_main.cpp:115 > +error_ecore_x: BTW, doesn't ecore_x_shutdown() needs to be called in *error_ecore_x* case instead of *error_edje* case?
Chris Dumez
Comment 10 2012-05-31 04:36:03 PDT
Comment on attachment 145046 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=145046&action=review >> Source/WebKit/efl/ewk/ewk_main.cpp:115 >> +error_ecore_x: > > BTW, doesn't ecore_x_shutdown() needs to be called in *error_ecore_x* case instead of *error_edje* case? No, I believe this is correct. Look at the other labels under, they do the same. There is no need to shutdown ecore x if it did not init.
Gyuyoung Kim
Comment 11 2012-05-31 04:50:36 PDT
Comment on attachment 145046 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=145046&action=review >>> Source/WebKit/efl/ewk/ewk_main.cpp:115 >>> +error_ecore_x: >> >> BTW, doesn't ecore_x_shutdown() needs to be called in *error_ecore_x* case instead of *error_edje* case? > > No, I believe this is correct. Look at the other labels under, they do the same. There is no need to shutdown ecore x if it did not init. I don't understand yet. If ecore_x_init(0) fails to initialize, go to error_ecore_x label, right? Then, It seems to me error_ecore_x label needs to invoke ecore_x_shutdown() as below, error_ecore_x: ecore_x_shutdown(); But, current patch calls ecore_evas_shutdown() instead of ecore_x_shutdown() when HAVE_ECORE_X is enabled. Let's assume there is no #ifdef HAVE_ECORE_X, error_edje: ecore_x_shutdown(); error_ecore_x: ecore_evas_shutdown(); Is above correct ?
Chris Dumez
Comment 12 2012-05-31 06:18:24 PDT
(In reply to comment #11) > (From update of attachment 145046 [details]) > View in context: https://bugs.webkit.org/attachment.cgi?id=145046&action=review > > >>> Source/WebKit/efl/ewk/ewk_main.cpp:115 > >>> +error_ecore_x: > >> > >> BTW, doesn't ecore_x_shutdown() needs to be called in *error_ecore_x* case instead of *error_edje* case? > > > > No, I believe this is correct. Look at the other labels under, they do the same. There is no need to shutdown ecore x if it did not init. > > I don't understand yet. If ecore_x_init(0) fails to initialize, go to error_ecore_x label, right? Then, It seems to me error_ecore_x label needs to invoke ecore_x_shutdown() as below, > > error_ecore_x: > ecore_x_shutdown(); > > But, current patch calls ecore_evas_shutdown() instead of ecore_x_shutdown() when HAVE_ECORE_X is enabled. > > Let's assume there is no #ifdef HAVE_ECORE_X, > > error_edje: > ecore_x_shutdown(); > error_ecore_x: > ecore_evas_shutdown(); > > Is above correct ? Yes, it is. Looks at other labels: error_ecore: evas_shutdown(); error_evas: // NOT evas_shutdown() eina_log_domain_unregister(_ewk_log_dom); _ewk_log_dom = -1; error_log_domain: eina_shutdown(); // NOT eina_log_domain_unregister() error_eina: return 0; // NOT eina_shutdown(). All the cleanup functions are shifted by 1 compared the the labels. The reason for that is: If the code jumps to "error_evas" label, this means that evas_init() failed. As a consequence, there is no point in calling evas_shutdown(). However, we need to call the shutdown functions for all the previous init calls (i.e. eina_log_domain_register and eina init.
Gyuyoung Kim
Comment 13 2012-05-31 06:36:43 PDT
(In reply to comment #12) > All the cleanup functions are shifted by 1 compared the the labels. The reason for that is: > If the code jumps to "error_evas" label, this means that evas_init() failed. As a consequence, there is no point in calling evas_shutdown(). However, we need to call the shutdown functions for all the previous init calls (i.e. eina_log_domain_register and eina init. Ok, I understand this. Thank you for your explanation. But, I don't like to goto ~ case statement. As in this case, it is a little difficult to understand algorithm logic. I would like to remove this goto statement in future. Anyway, looks good to me now. Thanks.
Thiago Marcos P. Santos
Comment 14 2012-06-01 04:41:22 PDT
LGTM but might introduce a crash here PluginViewEfl.cpp:238.
Chris Dumez
Comment 15 2012-06-01 04:57:14 PDT
(In reply to comment #14) > LGTM but might introduce a crash here PluginViewEfl.cpp:238. Would you care to elaborate? How could initializing ecore_x library cause a crash in a file I'm not touching? PluginViewEfl.cpp:238 *would* likely crash *without* without my patch since the ecore_x library was not initialized before calling ecore_x_display_get(). Also note that in ecore_x_init(0), 0 mean default display according to the doc. In case this is related to your comment.
Thiago Marcos P. Santos
Comment 16 2012-06-01 05:56:28 PDT
(In reply to comment #15) > (In reply to comment #14) > > LGTM but might introduce a crash here PluginViewEfl.cpp:238. > > Would you care to elaborate? How could initializing ecore_x library cause a crash in a file I'm not touching? > > PluginViewEfl.cpp:238 *would* likely crash *without* without my patch since the ecore_x library was not initialized before calling ecore_x_display_get(). > > Also note that in ecore_x_init(0), 0 mean default display according to the doc. In case this is related to your comment. Sorry, I thought that you were conditioning the ecore_x initialization to HAVE_ECORE_X flag. But it is not being initialized at all. PluginViewEfl.cpp:238 is a separated bug then. LGTM with no remarks. :)
Csaba Osztrogonác
Comment 17 2012-06-01 06:21:05 PDT
Comment on attachment 145046 [details] Patch rs=me
WebKit Review Bot
Comment 18 2012-06-01 07:23:18 PDT
Comment on attachment 145046 [details] Patch Clearing flags on attachment: 145046 Committed r119228: <http://trac.webkit.org/changeset/119228>
WebKit Review Bot
Comment 19 2012-06-01 07:23:24 PDT
All reviewed patches have been landed. Closing bug.
Sudarsana Nagineni (babu)
Comment 20 2012-06-01 08:14:08 PDT
DRT crashes on the test startup with this patch. The EFL Buildbots are red exiting early after 20 crashes. crash log for DumpRenderTree (pid 24858): STDOUT: <empty> STDERR: CRI<24918>:ewebkit /home/buildslave-1/webkit-buildslave/efl-linux-64-debug/build/Source/WebKit/efl/ewk/ewk_main.cpp:96 ewk_init() could not init ecore_x
WebKit Review Bot
Comment 21 2012-06-01 08:22:16 PDT
Re-opened since this is blocked by 88098
Chris Dumez
Comment 22 2012-06-03 22:49:48 PDT
Dominik, gyuyoung: This patch seems valid but it causes crashes on the build bot. The reason for that is that calling "ecore_x_init(0)" on a machine which does not have X running causes a crash :( I believe we have 2 possible solutions: 1. Make sure the ecore_x library is not build on the build bot. This way, the ECORE_X flag will not be set and ecore_x_init(0) will never be called. 2. Install a headless X on the build bots I think 1. is probably easier however, 2. would allow to enable/run the same tests as on a regular desktop machine.
Chris Dumez
Comment 23 2012-06-06 04:02:44 PDT
Created attachment 145987 [details] Patch Improved patch which runs each DRT in its own xfvb. This will avoid crashes on the bot due to X not running and the ecore_x library being used.
Chris Dumez
Comment 24 2012-06-06 04:39:06 PDT
Comment on attachment 145987 [details] Patch Clearing flags for now as it seems to cause trouble on my machine. The tests run fine for a while but then I get this message: stopping ImageDiff timed out, killing it killed Can not get image diff. ImageDiff program might not work correctly. After that, it keeps going but extremely slowly and apparently with a single Xvfb running. I'm not sure what's going on yet.
Alexander Shalamov
Comment 25 2012-09-04 04:29:05 PDT
Dominik Röttsches (drott)
Comment 26 2012-09-04 04:35:02 PDT
Comment on attachment 162007 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=162007&action=review Did you test this with DISPLAY unset? > Source/WebCore/platform/efl/SoundEfl.cpp:42 > + if (ecore_x_init(0)) { This potentially initializes ecoreX multiple times, right? How about a function level static variable here to remember whether initialization completed?
Chris Dumez
Comment 27 2012-09-04 04:36:08 PDT
Comment on attachment 162007 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=162007&action=review LGTM. Thanks. >> Source/WebCore/platform/efl/SoundEfl.cpp:42 >> + if (ecore_x_init(0)) { > > This potentially initializes ecoreX multiple times, right? How about a function level static variable here to remember whether initialization completed? No it does not. It increments a ref count.
Alexander Shalamov
Comment 28 2012-09-04 04:38:41 PDT
(In reply to comment #26) > (From update of attachment 162007 [details]) > View in context: https://bugs.webkit.org/attachment.cgi?id=162007&action=review > > Did you test this with DISPLAY unset? Yes, I tested with DISPLAY unset. > > Source/WebCore/platform/efl/SoundEfl.cpp:42 > > + if (ecore_x_init(0)) { > > This potentially initializes ecoreX multiple times, right? How about a function level static variable here to remember whether initialization completed? ecore_x_* has static variable for ref counting, all init / shutdown calls would increment / decrement ref count value.
Kenneth Rohde Christiansen
Comment 29 2012-09-04 04:42:21 PDT
Comment on attachment 162007 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=162007&action=review >>>> Source/WebCore/platform/efl/SoundEfl.cpp:42 >>>> + if (ecore_x_init(0)) { >>> >>> This potentially initializes ecoreX multiple times, right? How about a function level static variable here to remember whether initialization completed? >> >> No it does not. It increments a ref count. > > ecore_x_* has static variable for ref counting, all init / shutdown calls would increment / decrement ref count value. why not use the new WITH_ECORE_X ?
Alexander Shalamov
Comment 30 2012-09-04 04:48:57 PDT
(In reply to comment #29) > (From update of attachment 162007 [details]) > View in context: https://bugs.webkit.org/attachment.cgi?id=162007&action=review > > >>>> Source/WebCore/platform/efl/SoundEfl.cpp:42 > >>>> + if (ecore_x_init(0)) { > >>> > >>> This potentially initializes ecoreX multiple times, right? How about a function level static variable here to remember whether initialization completed? > >> > >> No it does not. It increments a ref count. > > > > ecore_x_* has static variable for ref counting, all init / shutdown calls would increment / decrement ref count value. > > why not use the new WITH_ECORE_X ? The macro was fetching screen to get UI related properties. Screen or display is not needed to call a bell (ecore_x_bell).
Kenneth Rohde Christiansen
Comment 31 2012-09-04 04:59:17 PDT
Comment on attachment 162007 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=162007&action=review >>>>>> Source/WebCore/platform/efl/SoundEfl.cpp:42 >>>>>> + if (ecore_x_init(0)) { >>>>> >>>>> This potentially initializes ecoreX multiple times, right? How about a function level static variable here to remember whether initialization completed? >>>> >>>> No it does not. It increments a ref count. >>> >>> ecore_x_* has static variable for ref counting, all init / shutdown calls would increment / decrement ref count value. >> >> why not use the new WITH_ECORE_X ? > > The macro was fetching screen to get UI related properties. > Screen or display is not needed to call a bell (ecore_x_bell). I guess it should be renamed then to ECORE_X_CALL_WITH_DISPLAY or so then to make that more clear
WebKit Review Bot
Comment 32 2012-09-04 06:32:07 PDT
Comment on attachment 162007 [details] Patch Clearing flags on attachment: 162007 Committed r127464: <http://trac.webkit.org/changeset/127464>
WebKit Review Bot
Comment 33 2012-09-04 06:32:13 PDT
All reviewed patches have been landed. Closing bug.
Note You need to log in before you can comment on or make changes to this bug.