Hello,

While I was browsing, I found that, in function Rm_session_client::detach(), there is a part that looping over Rm_client and unmap it:

        for (Rm_client *rc = _clients.first(); rc; rc = rc->List<Rm_client>::Element::next()) {
                /*
                 * XXX Unmapping managed dataspaces on kernels, which take a core-
                 *     local virtual address as unmap argument is not supported yet.
                 *     This is the case for Fiasco, Pistachio, and NOVA. On those
                 *     kernels, the unmap operation must be issued for each leaf
                 *     dataspace the managed dataspace is composed of. For kernels with
                 *     support for directed unmap (OKL4 or Codezero), unmap can be
                 *     simply applied for the contiguous virtual address region in the
                 *     client.
                 */
                if (!platform()->supports_direct_unmap()
                 && dsc->is_managed() && dsc->core_local_addr() == 0) {
                        PWRN("unmapping of managed dataspaces not yet supported");
                        break;
                }
                rc->unmap(dsc->core_local_addr() + region->offset(),   // <=== this part
                          region->base(), region->size());
        }


The implementation of Rm_client::unmap is the following:

        void Rm_client::unmap(addr_t core_local_base, addr_t virt_base, size_t size)
        {
                // TODO unmap it only from target space
                unmap_local(core_local_base, size >> get_page_size_log2());
        }

In the above function, since it is not using any member variables of Rm_client, when Rm_session_client::detach() calls multiple of Rm_client::unmap it is just calling the same function of "unmap_local" with the same parameters.
It results in calling l4_task_unmap multiple times with the same parameters.
I'm just concern that this may not cause anything harmful.

Best,
Jaeyong