-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hello,
at WineConf we had a fairly uncontroversial discussion about the Wine
Stable release process. As the current process of feature based Wine
releases isn't working(*) following changes were agreed upon.
Release Process Changes
- -----------------------
- - Switch to time based releases.
- - Major releases once a year in autumn/fall. Code freeze starts around
mid/end of September.
- - Michael Stefaniuc will be the stable maintainer …
[View More]starting with 1.8.x.
Other people are more than welcome to help out with Wine Stable.
I'll document stuff and send out a request for help during the code
freeze.
- - The stable release will be supported in bugzilla.
- - This changes take effect immediately. You can expect Alexandre to
announce a code freeze in the next couple of weeks.
- - We will revisit this changes should the need arise, e.g. reduce the
time between two major stable releases.
Discussion
- ----------
The discussion was done based on slide 9 of Alexandre's keynote
http://wiki.winehq.org/WineConf2015?action=AttachFile&do=get&target=winecon…
At the start Alexandre and others noted that we do not hear from users
for whom 1.6 is just working. We are getting reports only about the
stuff that breaks.
The discussion quickly geared to the changes accepted from above with
the focus on implementation details:
- - 6 months better? No, the 12-18 months stable release cadence prior to
1.8 was ok. Can be reduced later on should the need arise.
- - Synchronize with (a) major distro? No, release dates can slip on both
ends. Freeze should also not impact GSoC.
- - Nobody else volunteered during the discussion for the stable
maintainer role.
For the more drastic proposal of removing the the Wine Stable version
altogether, Alexandre made drafted a plan to follow a similar model to
the Linux Kernel. One release for the risky stuff and every second
release is for stabilization. He proposed also a two weeks "merge
window" for risky stuff followed by two weeks for the fixes and the last
two weeks of "freeze". This produced a loud outcry from most developers:
it would be unworkable without a prior move to a git pull model to
accept new features. This basically killed the proposal.
(*) 1.6 released > 2 years ago and was latest updated 1.5 years ago. It
doesn't compiles on a modern distribution anymore.
bye
michael
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.22 (GNU/Linux)
iD8DBQFWAT4O0ei8kcpE1VERAprfAKC0x+Zb6zHGv095REWGGYy+L/qsBQCgpr1+
Z9VxsMM7J1/wdpAyC8DPJaE=
=zhZ8
-----END PGP SIGNATURE-----
[View Less]
Hi,
While running your changed tests on Windows, I think I found new failures.
Being a bot and all I'm not very good at pattern recognition, so I might be
wrong, but could you please double-check?
Full results can be found at
https://testbot.winehq.org/JobDetails.pl?Key=16838
Your paranoid android.
=== w1064 (32 bit thread) ===
thread.c:1087: Test failed: got 0 with 5 (expected FALSE with ERROR_GEN_FAILURE)
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
Am 2015-09-23 um 10:27 schrieb Riccardo Bortolato:
> + sub_resource = wined3d_texture_get_sub_resource(surface_impl->wined3d_texture, surface_impl->sub_resource_idx);
> + wined3d_surface = wined3d_surface_from_resource(sub_resource);
> + if (FAILED(hr = wined3d_surface_getdc(wined3d_surface, &surface_dc)))
I expect the getdc call to fail because the application already called GetDC. I think you can just add …
[View More]a HDC dc field to struct wined3d_surface and compare it to the dc passed to GetSurfaceFromDC.
> + if (!hdc)
> {
> - TRACE("No surface found for dc %p.\n", hdc);
> *Surface = NULL;
> return DDERR_NOTFOUND;
> }
Personally I prefer to write a WARN if we return failure to the application. Note that this is just my personal choice though, the existing code is not consistent here.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
iQIcBAEBCAAGBQJWAnJqAAoJEN0/YqbEcdMwGTwP/3zCYpjVZYY0M3Mafxs7j3Dq
WPDkiiRzshspPTLIx3kurk7lRd2JXa8GbXZ8bOjx6bOz9wZC1wtejQEwLGhENOgz
bzX9tyYT2FdRXVXM0V0bEOAvd0rivgIeE0xcPWYZg289bHTx4bw/3Ql+uSsUY/8L
lamfMT5xOKhZmr6T5mI3MpHjUnbIUtBrOHvAggNexfl+RcvlFgmsl1MqajBHO+O7
W1ws4F35MzbXiEKUNEX3yH1cr3WRW+9xcAi89YYTnOTIpYsJHGOOOXoAeF1G2W2c
dvj131zQRdlIknLxxZPZXSQJJffdiDdnuJ6xeMfJ1f9SdH0PNPKhX08wH2Wz+Zr8
77zY0vK2iqnAl0HUcq4WrL4TLh60VU2UeyhAy8vqYjso60OvANAmYBljgO5Z4oI/
mypsa1sq11Vrp+DAIaxFyj15whgdV2tE/NvC4Kapx4OK8DTQ+9xHGJoED9AX/E+/
OvynPYd/r/WPYyIYJpSv/YOAN4OAusNpY7i4nlXu8RbphTFcNZTrtLU/EUJCfI6T
LaEx3TX9/Dg4BNrwY72cPleLKSZbGK1/59q0XWbH5Oft8HS48jL7IEJkNsNtJpqf
GOJr/EotzHpJC2QGKOZ19NhgcCb22GbF8jCniLMVUSj/DelDzKOJs+5VaRiFcNqo
AVr5Gv4UMzGlq7CjMo4v
=UoFu
-----END PGP SIGNATURE-----
[View Less]
Riccardo Bortolato wrote on Wed, 23 Sep 2015:
Disclaimer: I'm everything but an expert on Wine internals, so I'm
just asking in case I'm not missing something obvious.
> - surface_impl = wined3d_surface_get_parent(wined3d_surface);
> - *Surface = &surface_impl->IDirectDrawSurface7_iface;
> - IDirectDrawSurface7_AddRef(*Surface);
> - TRACE("Returning surface %p.\n", Surface);
> - return DD_OK;
> + wined3d_mutex_lock();
> + LIST_FOR_EACH_ENTRY(…
[View More]surface_impl, &ddraw->active_dcs, struct
> ddraw_surface, active_dcs_entry)
Here you get a mutex lock before iterating over the active_dcs.
> + if (surface_dc == hdc)
> + {
> + wined3d_mutex_unlock();
> + *Surface = &surface_impl->IDirectDrawSurface7_iface;
> + IDirectDrawSurface7_AddRef(*Surface);
> + TRACE("Returning surface %p.\n", Surface);
> + return DD_OK;
> + }
Here you free the lock before increasing the reference count. At first
sight, it would seem that you either don't need the lock while
iterating, or that you should increase the reference count before
releasing the lock in order to avoid races (unless the lock is for a
completely unrelated reason)
> --- a/dlls/ddraw/surface.c
> +++ b/dlls/ddraw/surface.c
> @@ -2176,7 +2176,9 @@ static HRESULT WINAPI
> ddraw_surface7_GetDC(IDirectDrawSurface7 *iface, HDC *hdc)
> if(hdc) *hdc = NULL;
> return DDERR_INVALIDPARAMS;
>
> - default: return hr;
> + default:
> + list_add_head(&surface->ddraw->active_dcs,
> &surface->active_dcs_entry);
Here you add something to the actives_dcs list without locking, so
this can race with the iterating (unless this is implicitly
synchronised in another way I'm not aware of).
> @@ -2246,6 +2248,8 @@ static HRESULT WINAPI
> ddraw_surface7_ReleaseDC(IDirectDrawSurface7 *iface, HDC h
> hr = ddraw_surface_update_frontbuffer(surface, NULL, FALSE);
> wined3d_mutex_unlock();
>
> + list_remove(&surface->active_dcs_entry);
> +
> return hr;
> }
Similarly, here you remove an item after releasing the lock, so it can
race with both adding and iterating (same caveat).
Jonas
[View Less]
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
Am 2015-09-23 um 10:27 schrieb Riccardo Bortolato:
> wined3d_mutex_lock();
> + sub_resource = wined3d_texture_get_sub_resource(bitmap_impl->wined3d_texture, bitmap_impl->sub_resource_idx);
> + wined3d_surface = wined3d_surface_from_resource(sub_resource);
> hr = wined3d_device_set_cursor_properties(device->wined3d_device,
> - hotspot_x, hotspot_y, bitmap_impl->wined3d_surface);
> + …
[View More] hotspot_x, hotspot_y, wined3d_surface);
> wined3d_mutex_unlock();
You may want to consider changing wined3d_device_set_cursor_properties
to accept a wined3d_texture instead. Keep in mind though that this would
be a bit of a side quest, as you'll have to find out if native accepts
surfaces that are part of textures or just stand-alone surfaces created
by CreateImageSurface. If it is the latter (which I suspect it is) then
wined3d_texture alone is OK. Otherwise you need texture + idx.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
iQIcBAEBCAAGBQJWAmlwAAoJEN0/YqbEcdMwGlkP/RfRVsceuPRGgVE0yJvhV26U
ci6CDlrj4Lb2mFcH3IVlJKuJEOcT2TLrcx2hT3H2+0OjDBvAIJyLhzjxABaZsg0N
OU4TJCvLfPiieF0npy7EBpUoe+E8a4046DRnLJsooco1Cp+Fk2LZO4B1OjMoaexl
FaO9zoAO+3KlTNVwRKX65KnOsZB7PtP0soCS9Gsmvx1gwwVe42uQ8B5pSgQQzcgW
UablqGdE0NnUGN2Bcj6vxPdW14FEaWC7Mp8fBl8olLO/FdlEoehzUMO7bPJNgGr2
wePB12qwmTfizcQ+Nmd5/HAGZMsn4vgfxu+kQSb0iaWxdgRtqKztlkLzAOFvGDTS
x+yZ2pWTcNp41MzZI9yxRStI5eLq5ZBQ9vY64A85W3Zwj/wTb7eR6A/qWveOUYsG
6EtQ9F0pQ43hotiE9a/8AdvTlrwQ+lcK6W01Ngg2mh9xnZ8pcD1Zqugy7RYDoHiQ
u+yd0BxvV3SjmjA0h4qZRVUh/ct5UMPCp6gJdHJFtSsKfoRAq96BzI3g3AFGH+Xv
u0Tkjq7QbhtLPxdjdc8A61SbwRFqygrj3XsZi0ji6qar5tjW58u0PdRskb4NTUhu
lEYUETpysaj29ktGURJ3s5/G1TKauDM9G4jx9puM8Kh0LilKshRwIsJaZf+4uHeW
BBmwwFk8QMQpKffLOCie
=W7On
-----END PGP SIGNATURE-----
[View Less]
Hi,
While running your changed tests on Windows, I think I found new failures.
Being a bot and all I'm not very good at pattern recognition, so I might be
wrong, but could you please double-check?
Full results can be found at
https://testbot.winehq.org/JobDetails.pl?Key=16820
Your paranoid android.
=== w7u (32 bit install) ===
The test timed out
=== wvistau64 (64 bit install) ===
Failure running script in VM: timed out waiting for the child process