On Sun, Feb 23, 2020 at 03:10:37PM +0100, Enrico Forestieri wrote: > On Sun, Feb 23, 2020 at 08:22:55AM -0500, Scott Kostyshak wrote: > > On Wed, Feb 19, 2020 at 08:07:46PM +0100, Enrico Forestieri wrote: > > > On Wed, Feb 19, 2020 at 01:19:54PM -0500, Scott Kostyshak wrote: > > > > > > > > It seems I committed too soon. Sorry for not waiting. Both the macro > > > > approach and Enrico's proposal are cleaner than my approach. I was > > > > planning to pursue the macro approach in a follow-up commit. > > > > > > Apparently, the macro approach was abandoned by the Qt folks. > > > > > > > Regarding > > > > C++11, don't we already use range-based for loops? Or is the question > > > > about if we require *all* of C++11? > > > > > > The latter. As shown by Pavel in the other post gcc 4.7 is lacking > > > something. As we use xcb_selection_notify_event_t only in one place, > > > I think defining a macro is overkill. In order to avoid many calls > > > to calloc() (I don't know how memory fragmentation is dealt with by > > > modern compilers), we could anyway use that idea as follows: > > > > > > union { > > > xcb_selection_notify_event_t event; > > > char padding[32]; > > > } padded_event; > > > auto & nev = padded_event.event; > > > > Enrico, I propose that you commit. Thanks for the fix. > > According to the followups to the post by Pavel and commit 748bb5a0, > I think that the C++11 alignas solution is preferred. Given that you > can check its effectiveness, I think that it is better that you > commit it.
I tried to test but probably I'm missing something in the change that I tested since I still get the following with Valgrind: ==14514== Syscall param writev(vector[...]) points to uninitialised byte(s) ==14514== at 0x61F578D: __writev (writev.c:26) ==14514== by 0x61F578D: writev (writev.c:24) ==14514== by 0x4A83BFC: ??? (in /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0) ==14514== by 0x4A83FD0: ??? (in /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0) ==14514== by 0x4A84246: ??? (in /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0) ==14514== by 0x4A84ACB: xcb_flush (in /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0) ==14514== by 0x17C906D: lyx::frontend::GuiApplication::nativeEventFilter(QByteArray const&, void*, long*) (GuiApplication.cpp:3370) ==14514== by 0x5AA4EEE: QAbstractEventDispatcher::filterNativeEvent(QByteArray const&, void*, long*) (qabstracteventdispatcher.cpp:484) ==14514== by 0x9C37854: QXcbConnection::handleXcbEvent(xcb_generic_event_t*) (in /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5.12.4) ==14514== by 0x9C38829: QXcbConnection::processXcbEvents(QFlags<QEventLoop::ProcessEventsFlag>) (in /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5.12.4) ==14514== by 0x9C63286: ??? (in /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5.12.4) ==14514== by 0x633684C: g_main_context_dispatch (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6200.1) ==14514== by 0x6336ACF: ??? (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6200.1) Attached is the patch on master that I tested. Scott
diff --git a/src/frontends/qt/GuiApplication.cpp b/src/frontends/qt/GuiApplication.cpp index 2cdd5f6e3b..2c86be6a82 100644 --- a/src/frontends/qt/GuiApplication.cpp +++ b/src/frontends/qt/GuiApplication.cpp @@ -3356,22 +3356,18 @@ bool GuiApplication::nativeEventFilter(const QByteArray & eventType, // It is expected that every X11 event is 32 bytes long, // even if not all 32 bytes are needed. See: // https://www.x.org/releases/current/doc/man/man3/xcb_send_event.3.xhtml - // TODO switch to Q_DECLARE_XCB_EVENT(event, xcb_selection_notify_event_t) - // once we require qt >= 5.6.3 or just copy the macro def. - xcb_selection_notify_event_t *nev = (xcb_selection_notify_event_t*) calloc(32, 1); - - nev->response_type = XCB_SELECTION_NOTIFY; - nev->requestor = srev->requestor; - nev->selection = srev->selection; - nev->target = srev->target; - nev->property = XCB_NONE; - nev->time = XCB_CURRENT_TIME; + alignas(32) xcb_selection_notify_event_t nev; + nev.response_type = XCB_SELECTION_NOTIFY; + nev.requestor = srev->requestor; + nev.selection = srev->selection; + nev.target = srev->target; + nev.property = XCB_NONE; + nev.time = XCB_CURRENT_TIME; xcb_connection_t * con = QX11Info::connection(); xcb_send_event(con, 0, srev->requestor, XCB_EVENT_MASK_NO_EVENT, - reinterpret_cast<char const *>(nev)); + reinterpret_cast<char const *>(&nev)); xcb_flush(con); - free(nev); #endif return true; } -- 2.20.1
signature.asc
Description: PGP signature
-- lyx-devel mailing list lyx-devel@lists.lyx.org http://lists.lyx.org/mailman/listinfo/lyx-devel