Rick,
thank you very much!
Here the changes I did:
void RexxActivation::live(size_t liveMark)
/******************************************************************************/
/* Function: Normal garbage collection live marking
*/
/******************************************************************************/
{
memory_mark(this->previous);
memory_mark(this->executable);
memory_mark(this->scope);
memory_mark(this->code);
memory_mark(this->settings.securityManager);
memory_mark(this->receiver);
memory_mark(this->activity);
memory_mark(this->parent);
memory_mark(this->dostack);
/* the stack and the local variables handle their own marking. */
/*
this->stack.live(liveMark);
this->settings.local_variables.live(liveMark);
*/
if (this->stack != OREF_NULL)
{
this->stack.live(liveMark);
}
if (this->settings.local_variables != OREF_NULL)
{
this->settings.local_variables.live(liveMark);
}
... cut ...
While compiling, unfortunately the following error occurs:
libtool: compile: g++ -DHAVE_CONFIG_H -I. -DORX_VER=4 -DORX_REL=1
-DORX_MOD=0 -DORX_FIX=0 -DORX_SYS_STR=\"MACOSX\"
-DORX_CATDIR=\"/opt/ooRexx/bin\" -DORX_SHARED_LIBRARY_EXT=\".dylib\" -I./lib
-I./api -I./api/platform/unix -I./common -I./common/platform/unix
-I./interpreter -I./interpreter/behaviour -I./interpreter/execution
-I./interpreter/memory -I./interpreter/package -I./interpreter/concurrency
-I./interpreter/expression -I./interpreter/instructions -I./interpreter/classes
-I./interpreter/classes/support -I./interpreter/runtime -I./interpreter/parser
-I./interpreter/messages -I./interpreter/streamLibrary
-I./interpreter/platform/common -I./interpreter/platform/unix -arch i386 -arch
i386 -DNOOPT -DPTHREAD_KERNEL -D_POSIX_THREAD -D_REENTRANT -D_GNU_SOURCE
-DLINUX -DOPSYS_LINUX -MT librexx_la-RexxActivation.lo -MD -MP -MF
.deps/librexx_la-RexxActivation.Tpo -c
./interpreter/execution/RexxActivation.cpp -fno-common -DPIC -o
.libs/librexx_la-RexxActivation.o
./interpreter/execution/RexxActivation.cpp: In member function 'virtual
void RexxActivation::live(size_t)':
./interpreter/execution/RexxActivation.cpp:931: error: no match for
'operator!=' in '((RexxActivation*)this)->RexxActivation::stack != 0'
./interpreter/execution/RexxActivation.cpp:935: error: no match for
'operator!=' in
'((RexxActivation*)this)->RexxActivation::settings.ActivationSettings::local_variables
!= 0'
make: *** [librexx_la-RexxActivation.lo] Error 1
Please advise!
Thanks,
---rony
On 11.02.2011 12:14, Rick McGuire wrote:
> I'm a little handicapped at the moment because the laptop I do my
> ooRexx work on died yesterday, but from the stack trace, I think I
> know what's going on. In RexxActivation::live(), there are the
> following lines:
>
> this->stack.live(livemark);
> this->settings.local_variables.live(livemark);
>
> Try changing these lines to this:
>
> if (this->stack != OREF_NULL)
> {
> this->stack.live(livemark);
> }
> if (this->settings.local_variables != OREF_NULL)
> {
> this->settings.local_variables.live(livemark);
> }
>
> It looks like you're hitting a tiny window where garbage collection is
> getting called when the local_variables are still null.
>
> Rick
------------------------------------------------------------------------------
The ultimate all-in-one performance toolkit: Intel(R) Parallel Studio XE:
Pinpoint memory and threading errors before they happen.
Find and fix more than 250 security defects in the development cycle.
Locate bottlenecks in serial and parallel code that limit performance.
http://p.sf.net/sfu/intel-dev2devfeb
_______________________________________________
Oorexx-devel mailing list
Oorexx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/oorexx-devel