[Bug 46099] Star Citizen not loading after implementation of WaitOnAddress () in wine
wine-bugs at winehq.org
wine-bugs at winehq.org
Wed Nov 28 20:53:07 CST 2018
https://bugs.winehq.org/show_bug.cgi?id=46099
--- Comment #22 from Greg Smith <codedonewell at gmail.com> ---
(In reply to Zebediah Figura from comment #21)
> (In reply to Fabian Maurer from comment #20)
> > > We need to be able to
> > > very that, at the exact point that the thread is queued on select(), the
> > > value still matches the comparand.
> >
> > What do you mean?
>
> If we check that the value matches before queueing, we can get a race of the
> form:
>
> thread A: checks value, still equal to comparand
> thread B: sets value
> thread B: perform wake
> thread A: queue self
>
> We need to prevent such a wake from occurring between the time thread A
> checks the value for the last time, and the time it queues itself.
>
> The Linux kernel manages this with futexes by locking the queue and then
> (effectively) atomically comparing the value and queueing the thread. We
> can't really use this approach, since we can't be reading process memory
> from the wineserver.
>
> My idea was to split queueing and waiting into two separate operations for
> futexes, though now I'm wondering if perhaps a CS might be better here.
Thanks for looking at this. I am just too new to wine changes to be confident
in the impacts of making the changes that I think are required.
Looking at what is there, I failed to think of a way to do it without changing
or at least copying the wineserver_select code - something that my experience
tells me is almost always means I don't understand how it works well enough.
I also think that CS may be a better path, but there seems to always be an
opportunity for a race condition. I certainly have an even greater respect now
for what pthread_cond_wait achieves!
--
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.
More information about the wine-bugs
mailing list