/* signaler*/
NvSciSyncFence sharedFence = NvSciSyncFenceInitializer;
NvSciSyncFence localFence = NvSciSyncFenceInitializer; /* always
initialize with the Initializer */
NvSciError err;
err = NvSciSyncObjGenerateFence(syncObj, &localFence);
if (err != NvSciError_Success) {
goto fail;
}
/* duplicate fence before sharing */
err = NvSciSyncFenceDup(&localFence, sharedFence);
if (err != NvSciError_Success) {
goto fail;
}
/* create more duplicates if necessary */
/* communicate the fence to the waiter. */
/* local copy no longer necessary, so dispose of it */
NvSciSyncFenceClear(&localFence); /* this call cleans references to
sync object and is needed for proper freeing */
/* do something else, like some CPU job */
err = NvSciSyncObjSignal(syncObj);
if (err != NvSciError_Success) {
goto fail;
}
/* waiter */
/* receive the sharedFence from the signaler */
err = NvSciSyncFenceWait(sharedFence,
waitContext, NV_WAIT_INFINITE);
if (err != NvSciError_Success) {
return err;
}
NvSciSyncFenceClear(sharedFence);