code: def _obtain_region(self, a, offset, size, flags, is_recursive):
          
          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
docs: 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