On Sun, Dec 27, 2020 at 01:46:46PM +0100, Peter Kovacs wrote:
> On 26.12.20 20:45, Jim Jagielski wrote:
> > So there is for sure a bug in AOO41X, but why it only seems to affect macOS
> > BigSur is
> > unknown. It is this:
> >
> > > diff --git a/main/bridges/source/cpp_uno/shared/vtablefactory.cxx
> > > b/main/bridges/source/cpp_uno/shared/vtablefactory.cxx
> > > index f4d6c56..2ca9b8f 100644
> > > --- a/main/bridges/source/cpp_uno/shared/vtablefactory.cxx
> > > +++ b/main/bridges/source/cpp_uno/shared/vtablefactory.cxx
> > > @@ -195,7 +195,7 @@ VtableFactory::VtableFactory(): m_arena(
> > > rtl_arena_create(
> > > "bridges::cpp_uno::shared::VtableFactory",
> > > sizeof (void *), // to satisfy alignment requirements
> > > - 0, reinterpret_cast< rtl_arena_type * >(-1), allocExec,
> > > freeExec, 0))
> > > + 0, reinterpret_cast< rtl_arena_type * >(0), allocExec, freeExec,
> > > 0))
> > > {
> > > if (m_arena == 0) {
> > > throw std::bad_alloc();
> > I *think* this solves the issue, and a quick-and-dirty compilation seems to
> > indicate that, but
> > I will double check.
> >
> > The question is: Does this warrant a full 4.1.9 release for ALL platforms?
> > To my mind, it does.
My question is also: How has it possibly worked until today? :-)
> yes we should go for 4.1.9 because there is no other way to fix this
> quickly.
I also agree.
> Any one has any Idea what the rtl_arena_create
> <http://opengrok.openoffice.org/openoffice/s?refs=rtl_arena_create&project=trunk>does?
> It looks to me like some C-Style factory, but I have a hard time
> understanding the code.
>
> And so far I did not find an explanation for it.
I tried to look into it. I am not an expert of this low-level stuff,
but ``arena'''s seem to be an alternative to calling plain malloc(3)
and free(3). They support a minimum size ("quantum") and some sort of
caching, that I could not fully understand.
They are somewhat chained among each other (each arena has a
``source''), with the ``public'' base object being gp_default_arena [1]
and two ``private'' objects being gp_arena_arena and gp_machdep_arena
inside /trunk/main/sal/rtl/source/alloc_arena.c
gp_machdep_arena is the ``source'' for the others, and it is
responsible of the actual allocation using function
rtl_machdep_alloc() [2]. Under Unix it cals mmap(2). Under Win32 it
calls VirtualAlloc() and under OS/2 it calls valloc().
Incidentally, the choice of mmap(2) over malloc(3) should be for
performance reasons, see [3]. It's a new thing I learned today ;-)
File main/bridges/source/cpp_uno/shared/vtablefactory.cxx declares its
own allocation function [4] that enables execution from the allocated
buffers (if I understood correctly).
I hope this makes sense.
References:
1:
http://opengrok.openoffice.org/xref/trunk/main/sal/rtl/source/alloc_arena.h?r=514f4c20#126
2:
http://opengrok.openoffice.org/xref/trunk/main/sal/rtl/source/alloc_arena.c?r=509a48ff#1182
3: https://stackoverflow.com/questions/1739296/malloc-vs-mmap-in-c
4:
http://opengrok.openoffice.org/xref/trunk/main/bridges/source/cpp_uno/shared/vtablefactory.cxx?r=858958ab#77
--
Arrigo
http://rigo.altervista.org
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]