Resource leakage?

Petr Ovtchenkov abominable-snowman at ...129...
Fri Mar 22 06:48:39 CET 2013


Hello,

File ports-foc/src/lib/l4lx/rm.cc, in method  Region_manager::reserve_range I see possible resource
leakage:



Region* Region_manager::reserve_range(Genode::size_t size, int align,
                                      Genode::addr_t start)
{
        using namespace Genode;
        void* addr = 0;

        while (true) {

                try {
                        /*
                         * We attach a managed-dataspace as a placeholder to
                         * Genode's region-map
                         */
                        Rm_connection *rmc = new (env()->heap()) Rm_connection(0, size);
                        addr = start ? env()->rm_session()->attach_at(rmc->dataspace(), start)
                                     : env()->rm_session()->attach(rmc->dataspace());
                        //PDBG("attach done addr=%p!", addr);
                        break;
                } catch(Rm_session::Attach_failed e) {
                        PWRN("attach failed start=%lx", start);
                        if (start) /* attach with pre-defined address failed, so search one */
                                start = 0;
                        else
                                return 0;
                }
        }

        /*
         * Mark the region reserved, in our region-map by setting the
         * dataspace reference to zero.
         */
        alloc_addr(size, (addr_t)addr);
        Region reg((addr_t)addr, size, 0);
        metadata(addr, reg);
        return metadata(addr);
}

If env()->rm_session()->attach_at or env()->rm_session()->attach throw exception (looks, this is normal flow),
then rmc and space, allocated from env()->heap() will be lost, right?

--

With best regards,

  -- ptr




More information about the users mailing list