From: Ian R. <id...@us...> - 2003-04-11 14:43:32
|
Michel D=E4nzer wrote: > On Don, 2003-04-10 at 03:32, Ian Romanick wrote: >=20 >>Michel D=E4nzer wrote: >> >>>On Don, 2003-04-10 at 00:12, Ian Romanick wrote: >>> >>>>I know that the DRM can generate the signal, but how do we make sure=20 >>>>it's handled by the client-side driver and not by the application?=20 >>> >>>The driver can choose whichever signal it wants, and if I'm not >>>mistaken, it can check for an existing signal handler, replace it with >>>its own and restore it afterwards. >> >>It's the classic problem of libraries using signals. The library=20 >>installs its signal handler, then the application, not knowing that the= =20 >>library is using a particular signal, installs its handler. The librar= y=20 >>never gets its signal, but the application gets an extra one. >=20 > I see, so the only possibility would be a signal that no application > will ever use. No idea if that's feasible. IMO, that's one area where the POSIX.4 team missed something. It would=20 have been really nice to have functions like alloc_rt_signal and=20 release_rt_signal. That would go a long way to preventing problems like=20 this. Of course, going that route would have had its own problems. > Here's an updated patch for the original problem. The only remaining > question I have is whether the early return 0 for the VBLANK_FLAG_SYNC > is correct. It depends on the semantic we want. Does VBLANK_FLAG_SYNC mean "always=20 wait exactly 1 refresh" or does it mean "always wait at least 1=20 refresh"? If it means the former, then the early-return is okay. The=20 original code assumes that it means the later. This allows an=20 application to set a higher swap-interval and have it be respected when=20 VBLANK_FLAG_SYNC is set. I came up with a slightly different patch that reverts to the trunk's=20 default swap-interval and keeps the existing behavior=20 w/VBLANK_FLAG_SYNC. The first wait becomes a relative wait for either 0=20 or 1 frames depending on VBLANK_FLAG_SYNC. The second wait defaults to=20 the application's perference if VBLANK_FLAG_INTERVAL is set. Opinions? |