From 0889e6b43e0b1702f945cb2165560b979247ec56 Mon Sep 17 00:00:00 2001 From: Przemyslaw Czerpak Date: Fri, 13 May 2011 02:05:59 +0000 Subject: [PATCH] 2011-05-13 04:05 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) * harbour/include/hbstack.h * harbour/src/vm/hvm.c ! fixed stack preloading in hb_vmRequestReenterExt() when new stack has to be allocated --- harbour/ChangeLog | 5 +++++ harbour/include/hbstack.h | 6 ++++-- harbour/src/vm/hvm.c | 6 ++++-- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 4d618f6429..7cad0b1ef2 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -16,6 +16,11 @@ The license applies to all entries newer than 2009-04-28. */ +2011-05-13 04:05 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) + * harbour/include/hbstack.h + * harbour/src/vm/hvm.c + ! fixed stack preloading in hb_vmRequestReenterExt() when new stack has to be allocated + 2011-05-12 18:45 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) * utils/hbmk2/hbmk2.prg % avoid duplicate requests for GT in .c stub diff --git a/harbour/include/hbstack.h b/harbour/include/hbstack.h index c829a906bc..83cdd6a6be 100644 --- a/harbour/include/hbstack.h +++ b/harbour/include/hbstack.h @@ -245,11 +245,12 @@ typedef struct # endif # if defined( HB_STACK_PRELOAD ) && !defined( HB_USE_TLS ) # if defined( hb_stack_ptr_get ) -# define HB_STACK_TLS_PRELOAD PHB_STACK _hb_stack_ptr_ = ( PHB_STACK ) hb_stack_ptr_get(); +# define HB_STACK_TLS_RELOAD _hb_stack_ptr_ = ( PHB_STACK ) hb_stack_ptr_get(); # undef hb_stack_ptr # else -# define HB_STACK_TLS_PRELOAD PHB_STACK _hb_stack_ptr_ = hb_stack_ptr; +# define HB_STACK_TLS_RELOAD _hb_stack_ptr_ = hb_stack_ptr; # endif +# define HB_STACK_TLS_PRELOAD PHB_STACK HB_STACK_TLS_RELOAD # define hb_stack ( * _hb_stack_ptr_ ) # define hb_stack_ref() ( _hb_stack_ptr_ ) # else @@ -266,6 +267,7 @@ typedef struct #if !defined( HB_STACK_TLS_PRELOAD ) # if defined( HB_STACK_PRELOAD ) # define HB_STACK_TLS_PRELOAD +# define HB_STACK_TLS_RELOAD # undef HB_STACK_PRELOAD # elif defined( _HB_STACK_MACROS_ ) # define HB_STACK_TLS_PRELOAD diff --git a/harbour/src/vm/hvm.c b/harbour/src/vm/hvm.c index 5f9640229d..1f8e8082a7 100644 --- a/harbour/src/vm/hvm.c +++ b/harbour/src/vm/hvm.c @@ -8824,13 +8824,15 @@ HB_BOOL hb_vmRequestReenterExt( void ) return HB_FALSE; else { - HB_STACK_TLS_PRELOAD - #if defined( HB_MT_VM ) + HB_STACK_TLS_PRELOAD HB_USHORT uiAction = hb_stackId() == NULL ? HB_VMSTACK_REQUESTED : 0; if( uiAction ) + { hb_vmThreadInit( NULL ); + HB_STACK_TLS_RELOAD + } else hb_stackPushReturn();