On Fri, Jan 22, 2010 at 09:04:26AM -0800, Tiago Vignatti wrote: > With this new hook drmAuthMagic becomes useless and should be deprecated. > You might want to implement AuthMagic on driver side instead. > > Attention: ABI being break.
I'll leave the review to the DRI2 experts, but I think you should either keep the server compatible with DRI2INFOREC_VERSION 3 and 4 drivers, or remove the compatibility code to deal with the new fields Jesse added being missing. Also, I don't think you need to bump DRI2INFOREC_VERSION again since Jesse already raised it to 4 and there hasn't been a release since. You can't just unconditionally copy AuthMagic out of the structure passed in by the driver, because if it's version 3 or 4, that will read past the end of what the driver allocated. Finally, you'll need to resolve your chanage against my changes in "[PATCH] DRI2: Allow multiple driver names." -- Aaron > Signed-off-by: Tiago Vignatti <[email protected]> > --- > hw/xfree86/dri2/dri2.c | 13 +++++++++++-- > hw/xfree86/dri2/dri2.h | 5 ++++- > 2 files changed, 15 insertions(+), 3 deletions(-) > > diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c > index 3db826e..9505401 100644 > --- a/hw/xfree86/dri2/dri2.c > +++ b/hw/xfree86/dri2/dri2.c > @@ -81,6 +81,7 @@ typedef struct _DRI2Screen { > DRI2ScheduleSwapProcPtr ScheduleSwap; > DRI2GetMSCProcPtr GetMSC; > DRI2ScheduleWaitMSCProcPtr ScheduleWaitMSC; > + DRI2AuthMagicProcPtr AuthMagic; > > HandleExposuresProcPtr HandleExposures; > } DRI2ScreenRec; > @@ -790,8 +791,15 @@ DRI2Authenticate(ScreenPtr pScreen, drm_magic_t magic) > { > DRI2ScreenPtr ds = DRI2GetScreen(pScreen); > > - if (ds == NULL || drmAuthMagic(ds->fd, magic)) > - return FALSE; > + if (ds == NULL) > + return FALSE; > + > + if (ds->AuthMagic) { > + if ((*ds->AuthMagic)(ds->fd, magic)) > + return FALSE; > + } > + else if (drmAuthMagic(ds->fd, magic)) > + return FALSE; > > return TRUE; > } > @@ -821,6 +829,7 @@ DRI2ScreenInit(ScreenPtr pScreen, DRI2InfoPtr info) > ds->CreateBuffer = info->CreateBuffer; > ds->DestroyBuffer = info->DestroyBuffer; > ds->CopyRegion = info->CopyRegion; > + ds->AuthMagic = info->AuthMagic; > > if (info->version >= 4) { > ds->ScheduleSwap = info->ScheduleSwap; > diff --git a/hw/xfree86/dri2/dri2.h b/hw/xfree86/dri2/dri2.h > index dd59297..0bec2c8 100644 > --- a/hw/xfree86/dri2/dri2.h > +++ b/hw/xfree86/dri2/dri2.h > @@ -63,6 +63,8 @@ typedef void > (*DRI2CopyRegionProcPtr)(DrawablePtr pDraw, > DRI2BufferPtr pSrcBuffer); > typedef void (*DRI2WaitProcPtr)(WindowPtr pWin, > unsigned int sequence); > +typedef int (*DRI2AuthMagicProcPtr)(int fd, uint32_t magic); > + > /** > * Schedule a buffer swap > * > @@ -152,7 +154,7 @@ typedef int > (*DRI2ScheduleWaitMSCProcPtr)(ClientPtr client, > /** > * Version of the DRI2InfoRec structure defined in this header > */ > -#define DRI2INFOREC_VERSION 4 > +#define DRI2INFOREC_VERSION 5 > > typedef struct { > unsigned int version; /**< Version of this struct */ > @@ -167,6 +169,7 @@ typedef struct { > DRI2ScheduleSwapProcPtr ScheduleSwap; > DRI2GetMSCProcPtr GetMSC; > DRI2ScheduleWaitMSCProcPtr ScheduleWaitMSC; > + DRI2AuthMagicProcPtr AuthMagic; > } DRI2InfoRec, *DRI2InfoPtr; > > extern _X_EXPORT int DRI2EventBase; > -- > 1.6.0.4 > _______________________________________________ xorg-devel mailing list [email protected] http://lists.x.org/mailman/listinfo/xorg-devel
