[PATCH] DRI2: Install client callback only once

Alex Deucher alexdeucher at gmail.com
Thu Sep 26 14:48:09 PDT 2013


On Thu, Sep 26, 2013 at 10:48 AM, Michel Dänzer <michel at daenzer.net> wrote:
> From: Michel Dänzer <michel.daenzer at amd.com>
>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=60182
> Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>


Acked-by: Alex Deucher <alexander.deucher at amd.com>

> ---
>  src/radeon_dri2.c  | 13 +++++++------
>  src/radeon_probe.h |  1 -
>  2 files changed, 7 insertions(+), 7 deletions(-)
>
> diff --git a/src/radeon_dri2.c b/src/radeon_dri2.c
> index fa3719d..a211960 100644
> --- a/src/radeon_dri2.c
> +++ b/src/radeon_dri2.c
> @@ -520,6 +520,8 @@ typedef struct _DRI2ClientEvents {
>
>  #if HAS_DEVPRIVATEKEYREC
>
> +static int DRI2InfoCnt;
> +
>  static DevPrivateKeyRec DRI2ClientEventsPrivateKeyRec;
>  #define DRI2ClientEventsPrivateKey (&DRI2ClientEventsPrivateKeyRec)
>
> @@ -1543,7 +1545,6 @@ radeon_dri2_screen_init(ScreenPtr pScreen)
>      RADEONInfoPtr info = RADEONPTR(pScrn);
>      DRI2InfoRec dri2_info = { 0 };
>  #ifdef USE_DRI2_SCHEDULING
> -    RADEONEntPtr pRADEONEnt   = RADEONEntPriv(pScrn);
>      const char *driverNames[2];
>      Bool scheduling_works = TRUE;
>  #endif
> @@ -1607,7 +1608,7 @@ radeon_dri2_screen_init(ScreenPtr pScreen)
>          dri2_info.driverNames = driverNames;
>          driverNames[0] = driverNames[1] = dri2_info.driverName;
>
> -       if (pRADEONEnt->dri2_info_cnt == 0) {
> +       if (DRI2InfoCnt == 0) {
>  #if HAS_DIXREGISTERPRIVATEKEY
>             if (!dixRegisterPrivateKey(DRI2ClientEventsPrivateKey,
>                                        PRIVATE_CLIENT, sizeof(DRI2ClientEventsRec))) {
> @@ -1627,7 +1628,7 @@ radeon_dri2_screen_init(ScreenPtr pScreen)
>             AddCallback(&ClientStateCallback, radeon_dri2_client_state_changed, 0);
>         }
>
> -       pRADEONEnt->dri2_info_cnt++;
> +       DRI2InfoCnt++;
>      }
>  #endif
>
> @@ -1646,12 +1647,12 @@ void radeon_dri2_close_screen(ScreenPtr pScreen)
>  {
>      ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
>      RADEONInfoPtr info = RADEONPTR(pScrn);
> -#ifdef USE_DRI2_SCHEDULING
> -    RADEONEntPtr pRADEONEnt   = RADEONEntPriv(pScrn);
>
> -    if (--pRADEONEnt->dri2_info_cnt == 0)
> +#ifdef USE_DRI2_SCHEDULING
> +    if (--DRI2InfoCnt == 0)
>         DeleteCallback(&ClientStateCallback, radeon_dri2_client_state_changed, 0);
>  #endif
> +
>      DRI2CloseScreen(pScreen);
>      drmFree(info->dri2.device_name);
>  }
> diff --git a/src/radeon_probe.h b/src/radeon_probe.h
> index 67e70ef..de0135d 100644
> --- a/src/radeon_probe.h
> +++ b/src/radeon_probe.h
> @@ -135,7 +135,6 @@ typedef struct
>      int fd_ref;
>      unsigned long     fd_wakeup_registered; /* server generation for which fd has been registered for wakeup handling */
>      int fd_wakeup_ref;
> -    int dri2_info_cnt;
>  } RADEONEntRec, *RADEONEntPtr;
>
>  extern const OptionInfoRec *RADEONOptionsWeak(void);
> --
> 1.8.4.rc3
>
> _______________________________________________
> xorg-driver-ati mailing list
> xorg-driver-ati at lists.x.org
> http://lists.x.org/mailman/listinfo/xorg-driver-ati


More information about the xorg-driver-ati mailing list