Details
-
Bug
-
Resolution: Unresolved
-
P2: Important
-
4.6.3
-
None
-
solaris 64
-
76bce7b04ceaae174c8ef0db5223f2dd17d9b102
Description
The solaris 64 bit version crashes on accessing QApplication::clipboard(). Please see the following stack trace:
signal BUS (invalid address alignment) in _XData32 at 0xffffffff7db5b664
[1] _XData32(0x107ff7430, 0xffffffff7ffeea04, 0x4, 0x1042a4, 0xffffffff7c90c8a8, 0x1), at 0xffffffff7db5b664
[2] XChangeProperty(0x1, 0x1, 0x10814211c, 0x13, 0x20, 0x0), at 0xffffffff7db2bf8c
=>[3] QClipboard::QClipboard(this = 0x1083239f0, parent = (nil)), line 461 in "qclipboard_x11.cpp"
[4] QApplication::clipboard(), line 3092 in "qapplication.cpp"
...
I have found that the problem is in the following piece of code:
if (data.timestamp == CurrentTime) { setupOwner(); int dummy = 0; Window ownerId = owner->internalWinId(); XChangeProperty(X11->display, ownerId, ATOM(CLIP_TEMPORARY), XA_INTEGER, 32, PropModeReplace, (uchar*)&dummy, 1); XWindowEvent(X11->display, ownerId, PropertyChangeMask, &ev); data.timestamp = ev.xproperty.time; XDeleteProperty(X11->display, ownerId, ATOM(CLIP_TEMPORARY)); }
The fix for the problem is to replace "int dummy" with "long dummy" , which will fix data misalignment on solaris 64.