[RFC v2 03/12] sync: Move fence destroy call to object specific function

Louis-Francis Ratté-Boulianne lfrb at collabora.com
Wed Sep 27 05:19:54 UTC 2017


Needed so multiple types of sync fences can exist (SHM and DMA).

Signed-off-by: Louis-Francis Ratté-Boulianne <lfrb at collabora.com>
---
 miext/sync/misync.c    | 25 +++++++++++++++----------
 miext/sync/misync.h    | 10 +++++-----
 miext/sync/misyncshm.c | 30 +++++++++++++++---------------
 3 files changed, 35 insertions(+), 30 deletions(-)

diff --git a/miext/sync/misync.c b/miext/sync/misync.c
index 490fa0b17..95b062498 100644
--- a/miext/sync/misync.c
+++ b/miext/sync/misync.c
@@ -41,11 +41,10 @@ miSyncScreenCreateFence(ScreenPtr pScreen, SyncFence * pFence,
     pFence->triggered = initially_triggered;
 }
 
-void
-miSyncScreenDestroyFence(ScreenPtr pScreen, SyncFence * pFence)
+int
+miSyncGetFenceType(SyncFence *pFence)
 {
-    (void) pScreen;
-    (void) pFence;
+    return pFence->type;
 }
 
 /* Default implementations of the per-object functions */
@@ -83,6 +82,14 @@ miSyncFenceDeleteTrigger(SyncTrigger * pTrigger)
     return;
 }
 
+void
+miSyncFenceDestroy(SyncFence * pFence)
+{
+    (void) pFence;
+
+    return;
+}
+
 /* Machine independent portion of the fence sync object implementation */
 void
 miSyncInitFence(ScreenPtr pScreen, SyncFence * pFence, Bool initially_triggered)
@@ -94,7 +101,8 @@ miSyncInitFence(ScreenPtr pScreen, SyncFence * pFence, Bool initially_triggered)
         &miSyncFenceReset,
         &miSyncFenceCheckTriggered,
         &miSyncFenceAddTrigger,
-        &miSyncFenceDeleteTrigger
+        &miSyncFenceDeleteTrigger,
+        &miSyncFenceDestroy
     };
 
     pFence->pScreen = pScreen;
@@ -106,8 +114,6 @@ miSyncInitFence(ScreenPtr pScreen, SyncFence * pFence, Bool initially_triggered)
 void
 miSyncDestroyFence(SyncFence * pFence)
 {
-    ScreenPtr pScreen = pFence->pScreen;
-    SyncScreenPrivPtr pScreenPriv = SYNC_SCREEN_PRIV(pScreen);
     SyncTriggerList *ptl, *pNext;
 
     pFence->sync.beingDestroyed = TRUE;
@@ -118,7 +124,7 @@ miSyncDestroyFence(SyncFence * pFence)
         free(ptl);              /* destroy the trigger list as we go */
     }
 
-    pScreenPriv->funcs.DestroyFence(pScreen, pFence);
+    pFence->funcs.Destroy(pFence);
 
     dixFreeObjectWithPrivates(pFence, PRIVATE_SYNC_FENCE);
 }
@@ -162,8 +168,7 @@ miSyncSetup(ScreenPtr pScreen)
     SyncScreenPrivPtr pScreenPriv;
 
     static const SyncScreenFuncsRec miSyncScreenFuncs = {
-        &miSyncScreenCreateFence,
-        &miSyncScreenDestroyFence
+        &miSyncScreenCreateFence
     };
 
     if (!dixPrivateKeyRegistered(&miSyncScreenPrivateKey)) {
diff --git a/miext/sync/misync.h b/miext/sync/misync.h
index dc78c5fdb..b3838f1e2 100644
--- a/miext/sync/misync.h
+++ b/miext/sync/misync.h
@@ -34,26 +34,22 @@ typedef struct _SyncTrigger SyncTrigger;
 typedef void (*SyncScreenCreateFenceFunc) (ScreenPtr pScreen,
                                            SyncFence * pFence,
                                            Bool initially_triggered);
-typedef void (*SyncScreenDestroyFenceFunc) (ScreenPtr pScreen,
-                                            SyncFence * pFence);
 
 typedef struct _syncScreenFuncs {
     SyncScreenCreateFenceFunc CreateFence;
-    SyncScreenDestroyFenceFunc DestroyFence;
 } SyncScreenFuncsRec, *SyncScreenFuncsPtr;
 
 
 extern _X_EXPORT void
 miSyncScreenCreateFence(ScreenPtr pScreen, SyncFence * pFence,
                         Bool initially_triggered);
-extern _X_EXPORT void
- miSyncScreenDestroyFence(ScreenPtr pScreen, SyncFence * pFence);
 
 typedef void (*SyncFenceSetTriggeredFunc) (SyncFence * pFence);
 typedef void (*SyncFenceResetFunc) (SyncFence * pFence);
 typedef Bool (*SyncFenceCheckTriggeredFunc) (SyncFence * pFence);
 typedef void (*SyncFenceAddTriggerFunc) (SyncTrigger * pTrigger);
 typedef void (*SyncFenceDeleteTriggerFunc) (SyncTrigger * pTrigger);
+typedef void (*SyncFenceDestroyFunc) (SyncFence * pFence);
 
 typedef struct _syncFenceFuncs {
     SyncFenceSetTriggeredFunc SetTriggered;
@@ -61,6 +57,7 @@ typedef struct _syncFenceFuncs {
     SyncFenceCheckTriggeredFunc CheckTriggered;
     SyncFenceAddTriggerFunc AddTrigger;
     SyncFenceDeleteTriggerFunc DeleteTrigger;
+    SyncFenceDestroyFunc Destroy;
 } SyncFenceFuncsRec, *SyncFenceFuncsPtr;
 
 extern _X_EXPORT void
@@ -91,6 +88,9 @@ miSyncFenceAddTrigger(SyncTrigger * pTrigger);
 void
 miSyncFenceDeleteTrigger(SyncTrigger * pTrigger);
 
+void
+miSyncFenceDestroy(SyncFence * pFence);
+
 int
 miSyncInitFenceFromFD(DrawablePtr pDraw, SyncFence *pFence, int fd, BOOL initially_triggered);
 
diff --git a/miext/sync/misyncshm.c b/miext/sync/misyncshm.c
index 01f82fc00..f55a3f8a5 100644
--- a/miext/sync/misyncshm.c
+++ b/miext/sync/misyncshm.c
@@ -88,12 +88,26 @@ miSyncShmFenceDeleteTrigger(SyncTrigger * pTrigger)
     miSyncFenceDeleteTrigger(pTrigger);
 }
 
+static void
+miSyncShmFenceDestroy(SyncFence * pFence)
+{
+    SyncShmFencePrivatePtr      pPriv = SYNC_FENCE_PRIV(pFence);
+
+    if (pPriv->fence) {
+        xshmfence_trigger(pPriv->fence);
+        xshmfence_unmap_shm(pPriv->fence);
+        close(pPriv->fd);
+    }
+    miSyncFenceDestroy(pFence);
+}
+
 static const SyncFenceFuncsRec miSyncShmFenceFuncs = {
     &miSyncShmFenceSetTriggered,
     &miSyncShmFenceReset,
     &miSyncShmFenceCheckTriggered,
     &miSyncShmFenceAddTrigger,
-    &miSyncShmFenceDeleteTrigger
+    &miSyncShmFenceDeleteTrigger,
+    &miSyncShmFenceDestroy
 };
 
 static void
@@ -107,19 +121,6 @@ miSyncShmScreenCreateFence(ScreenPtr pScreen, SyncFence * pFence,
     pFence->funcs = miSyncShmFenceFuncs;
 }
 
-static void
-miSyncShmScreenDestroyFence(ScreenPtr pScreen, SyncFence * pFence)
-{
-    SyncShmFencePrivatePtr      pPriv = SYNC_FENCE_PRIV(pFence);
-
-    if (pPriv->fence) {
-        xshmfence_trigger(pPriv->fence);
-        xshmfence_unmap_shm(pPriv->fence);
-        close(pPriv->fd);
-    }
-    miSyncScreenDestroyFence(pScreen, pFence);
-}
-
 static int
 miSyncShmCreateFenceFromFd(ScreenPtr pScreen, SyncFence *pFence, int fd, Bool initially_triggered)
 {
@@ -179,7 +180,6 @@ _X_EXPORT Bool miSyncShmScreenInit(ScreenPtr pScreen)
     funcs = miSyncGetScreenFuncs(pScreen);
 
     funcs->CreateFence = miSyncShmScreenCreateFence;
-    funcs->DestroyFence = miSyncShmScreenDestroyFence;
 
     return TRUE;
 }
-- 
2.13.0



More information about the xorg-devel mailing list