def _obtain_region(self, a, offset, size, flags, is_recursive):
        """Utilty to create a new region - for more information on the parameters,
        see MapCursor.use_region.
        :param a: A regions (a)rray
        :return: The newly created region"""
        if self._memory_size + size > self._max_memory_size:
            self._collect_lru_region(size)
        # END handle collection

        r = None
        if a:
            assert len(a) == 1
            r = a[0]
        else:
            try:
                r = self.MapRegionCls(a.path_or_fd(), 0, sys.maxsize, flags)
            except Exception:
                # apparently we are out of system resources or hit a limit
                # As many more operations are likely to fail in that condition (
                # like reading a file from disk, etc) we free up as much as possible
                # As this invalidates our insert position, we have to recurse here
                if is_recursive:
                    # we already tried this, and still have no success in obtaining
                    # a mapping. This is an exception, so we propagate it
                    raise
                # END handle existing recursion
                self._collect_lru_region(0)
                return self._obtain_region(a, offset, size, flags, True)
            # END handle exceptions

            self._handle_count += 1
            self._memory_size += r.size()
            a.append(r)
        # END handle array

        assert r.includes_ofs(offset)
        return r
def _obtain_region ( self , a , offset , size , flags , is_recursive ) : if self . _memory_size + size > self . _max_memory_size : self . _collect_lru_region ( size ) r = None if a : assert len ( a ) == 1 r = a [ 0 ] else : try : r = self . MapRegionCls ( a . path_or_fd ( ) , 0 , sys . maxsize , flags ) except Exception : if is_recursive : raise self . _collect_lru_region ( 0 ) return self . _obtain_region ( a , offset , size , flags , True ) self . _handle_count += 1 self . _memory_size += r . size ( ) a . append ( r ) assert r . includes_ofs ( offset ) return r
Utilty to create a new region - for more information on the parameters,
        see MapCursor.use_region.
        :param a: A regions (a)rray
        :return: The newly created region