[pkg-wine-party] Bug#836911: /usr/bin/winecfg-development: winecfg-development is a fork bomb
Jens Reyer
jre.winesim at gmail.com
Fri Sep 9 16:51:58 UTC 2016
On 07.09.2016 20:27, Jens Reyer wrote:
> I think I can reproduce this: Wine starts a
> wineserver which all other Wine processes connect to. This wineserver
> has to be from the same build as the connecting process. Now if wine
> (stable)'s wineserver is already running and I then start
> wine-development I can observe this issue.
It seems that in the Debian packaging SERVER_PROTOCOL_VERSION is always
1, and thus the check if server and clients match doesn't work.
Testing between Debian's and winehq's versions I get e.g.:
$ /usr/lib/wine-development/wine winecfg
$ /usr/lib/wine-development/wine winecfg
--> OK, 2 winecfg windows
$ /usr/lib/wine/wine winecfg
$ /usr/lib/wine-development/wine winecfg
--> fork bomb (use "wineserver -k" to avoid system crash)
$ /opt/wine-devel/bin/wine winecfg
$ /usr/lib/wine/wine winecfg
wine client error:0: version mismatch 515/1.
Your wine binary was not upgraded correctly,
or you have an older one somewhere in your PATH.
Or maybe the wrong wineserver is still running?
--> OK, mismatch detected
$ /opt/wine-devel/bin/wine winecfg
$ /opt/wine-staging/bin/wine winecfg
wine client error:0: version mismatch 515/516.
Your wineserver binary was not upgraded correctly,
or you have an older one somewhere in your PATH.
Or maybe the wrong wineserver is still running?
--> OK, mismatch detected
Attached patch is a dirty workaround for this, by always setting the
SERVER_PROTOCOL_VERSION to 2. So if we apply this to e.g.
src:wine-development, but not to src:wine, it will be detected if a
client tries to connect to a mismatching wineserver from the other set:
$ /usr/lib/wine-development/wine winecfg
$ /usr/lib/wine/wine winecfg
wine client error:0: version mismatch 2/1.
Your wine binary was not upgraded correctly,
or you have an older one somewhere in your PATH.
Or maybe the wrong wineserver is still running?
--> OK, mismatch detected
However this workaround doesn't catch any version incompatibilities.
So far I found that:
internally SERVER_PROTOCOL_VERSION is SERVER_PROT.
tools/make_requests puts this in include/wine/server_protocol.h.new
include/wine/server_protocol.h in git has:
#define SERVER_PROTOCOL_VERSION 515
This number seems to be updated with every relevant change.
I assume generate/request.patch is incomplete, and needs to be fixed to
correctly produce the right SERVER_PROTOCOL_VERSION. But I don't know if
I can come up with a real fix. Any help would be appreciated!
Other diagnosis (dead ends):
- /tmp/.wine-$uid gets created.
- I removed all /usr/bin/wine* and replaced the wineserver script
by the binary to rule out the alternatives system and our
scripts/link setup as reason for this.
But I assume the alternatives system just led people to playing
with wine and wine-development, which exposed this bug much
more, see also #836566.
- I built without the shlib-exit-calls.patch.
Greets
jre
-------------- next part --------------
A non-text attachment was scrubbed...
Name: patch0.patch
Type: text/x-patch
Size: 942 bytes
Desc: not available
URL: <http://lists.alioth.debian.org/pipermail/pkg-wine-party/attachments/20160909/cab600e8/attachment.bin>
More information about the pkg-wine-party
mailing list