X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=drm-lease-manager%2Flease-manager.c;h=6fafb46da983eea81cad0eb2c375916d2abd9b34;hb=bdf7c337439ff0b70b67462c1f00f5b61942e76a;hp=016f3181db17e8aad8b26ac5f780105578391172;hpb=ecaaf9e2ad40181d916049510823ce8557ecd91e;p=src%2Fdrm-lease-manager.git diff --git a/drm-lease-manager/lease-manager.c b/drm-lease-manager/lease-manager.c index 016f318..6fafb46 100644 --- a/drm-lease-manager/lease-manager.c +++ b/drm-lease-manager/lease-manager.c @@ -372,6 +372,28 @@ int lm_lease_grant(struct lm *lm, struct lease_handle *handle) return lease->lease_fd; } +int lm_lease_transfer(struct lm *lm, struct lease_handle *handle) +{ + assert(lm); + assert(handle); + + struct lease *lease = (struct lease *)handle; + if (!lease->is_granted) + return -1; + + // TODO: close this fd once a frame is presented from the new + // client. + int old_lease_fd = dup(lease->lease_fd); + + lm_lease_revoke(lm, handle); + if (lm_lease_grant(lm, handle) < 0) { + close(old_lease_fd); + return -1; + } + + return lease->lease_fd; +} + void lm_lease_revoke(struct lm *lm, struct lease_handle *handle) { assert(lm);