On June 5, 2017 6:10:22 PM Varad Gautam <varad.gau...@collabora.com> wrote:

Hi Daniel,

On Mon, 2017-06-05 at 14:53 +0100, Daniel Stone wrote:
Hi Varad,

On 30 May 2017 at 12:53, Varad Gautam <varadgau...@gmail.com> wrote:
>
> +   /* We only support all planes from the same bo.
> +    * brw_bo_gem_create_from_prime() should return the same pointer for all
> +    * fds received here */
> +   bo = brw_bo_gem_create_from_prime(screen->bufmgr, fds[0], size);
> +   for (i = 1; i < num_fds; i++) {
> +      if (bo != brw_bo_gem_create_from_prime(screen->bufmgr, fds[i], size))
> +         return NULL;

This above takes a ref, which gets leaked.

           struct brw_bo *aux =
brw_bo_gem_create_from_prime(screen->bufmgr, fds[i], size);
           brw_bo_unreference(aux);
           if (aux != bo)

Thanks for spotting this. Can the unref(aux) happen before comparing against bo?

That should be fine as we have a reference to bo. If the two pointers compare equal they after the under the they were equal before the unref so they were the same before the unref.

Or should this be something like:
   for (...) {
      struct brw_bo *aux = brw_bo_gem_create_from_prime(screen->bufmgr, fds[i],
size);
      if (aux != bo) {
         brw_bo_unreference(aux);
         return NULL;
      }
      brw_bo_unreference(aux);
   }
              return NULL;

Thanks for the fix!

Cheers,
Daniel
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to