2008-10-28 20:08 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbstack.h
* harbour/source/vm/estack.c
+ added hb_stackReleaseTSD() function - this function can be called
only in HVM cleanup state when all threads except the main one are
released
* harbour/source/rdd/dbf1.c
* harbour/source/rdd/dbffpt/dbffpt1.c
* harbour/source/rdd/dbfntx/dbfntx1.c
* harbour/source/rdd/dbfcdx/dbfcdx1.c
* make RDDINFO settings in BDF* based RDDs thread local
* harbour/include/hbclass.ch
* minor modification
This commit is contained in:
@@ -8,6 +8,22 @@
|
||||
2008-12-31 13:59 UTC+0100 Foo Bar (foo.bar foobar.org)
|
||||
*/
|
||||
|
||||
2008-10-28 20:08 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
||||
* harbour/include/hbstack.h
|
||||
* harbour/source/vm/estack.c
|
||||
+ added hb_stackReleaseTSD() function - this function can be called
|
||||
only in HVM cleanup state when all threads except the main one are
|
||||
released
|
||||
|
||||
* harbour/source/rdd/dbf1.c
|
||||
* harbour/source/rdd/dbffpt/dbffpt1.c
|
||||
* harbour/source/rdd/dbfntx/dbfntx1.c
|
||||
* harbour/source/rdd/dbfcdx/dbfcdx1.c
|
||||
* make RDDINFO settings in BDF* based RDDs thread local
|
||||
|
||||
* harbour/include/hbclass.ch
|
||||
* minor modification
|
||||
|
||||
2008-10-28 17:56 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
||||
* harbour/source/vm/dynlibhb.c
|
||||
! added #define INCL_DOSMODULEMGR for OS2 builds
|
||||
|
||||
@@ -577,10 +577,10 @@ DECLARE HBClass ;
|
||||
#endif /* HB_CLS_XPP */
|
||||
|
||||
/* Class datas and messages - we do not support real class messages yet */
|
||||
#xcommand CLASSMETHOD <MethodName> [ AS <type> ] [<export: EXPORTED, VISIBLE>] [<protect: PROTECTED>] [<hidde: HIDDEN>] [<share: SHARED>] [<persistent: PERSISTENT, PROPERTY>] [<sync: SYNC>] => ;
|
||||
#xcommand CLASSMETHOD <MethodName> [ AS <type> ] [<ctor: CONSTRUCTOR>] [<export: EXPORTED, VISIBLE>] [<protect: PROTECTED>] [<hidde: HIDDEN>] [<share: SHARED>] [<persistent: PERSISTENT, PROPERTY>] [<sync: SYNC>] => ;
|
||||
_HB_MEMBER __HB_CLS_ASFUNC(<MethodName>) [ AS <type> ];;
|
||||
__HB_CLS_DECLARE_METHOD __HB_CLS_PARAMS(<MethodName>) _CLASS_NAME_ ;;
|
||||
oClass:AddClsMethod( __HB_CLS_ASSTRING(<MethodName>), @__HB_CLS_ASID( __HB_CLS_MTHNAME _CLASS_NAME_ <MethodName> )(), __HB_CLS_SCOPE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.share.>, HB_OO_CLSTP_SHARED, 0 ) + iif( <.persistent.>, HB_OO_CLSTP_PERSIST, 0 ) + iif( <.sync.>, HB_OO_CLSTP_SYNC, 0 ) )
|
||||
oClass:AddClsMethod( __HB_CLS_ASSTRING(<MethodName>), @__HB_CLS_ASID( __HB_CLS_MTHNAME _CLASS_NAME_ <MethodName> )(), __HB_CLS_SCOPE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.share.>, HB_OO_CLSTP_SHARED, 0 ) + iif( <.ctor.>, HB_OO_CLSTP_CTOR, 0 ) + iif( <.persistent.>, HB_OO_CLSTP_PERSIST, 0 ) + iif( <.sync.>, HB_OO_CLSTP_SYNC, 0 ) )
|
||||
|
||||
#xcommand CLASSVAR <!DataName1!> [, <!DataNameN!>] [ <tp: TYPE, AS> <type> ] [ <as: ASSIGN, INIT> <uValue> ] [<export: EXPORTED, VISIBLE>] [<protect: PROTECTED>] [<hidde: HIDDEN>] [<ro: READONLY, RO>] [<share: SHARED>] [<persistent: PERSISTENT, PROPERTY>] [<sync: SYNC>] => ;
|
||||
_HB_MEMBER {[ AS <type>] <DataName1> [, <DataNameN>] } ;;
|
||||
|
||||
@@ -281,6 +281,7 @@ extern void hb_stackIncrease( void ); /* increase the stack size */
|
||||
/* thread specific data */
|
||||
extern void * hb_stackGetTSD( PHB_TSD pTSD );
|
||||
extern void * hb_stackTestTSD( PHB_TSD pTSD );
|
||||
extern void hb_stackReleaseTSD( PHB_TSD pTSD );
|
||||
|
||||
extern BYTE * hb_stackDirBuffer( void );
|
||||
extern PHB_IOERRORS hb_stackIOErrors( void );
|
||||
|
||||
@@ -65,6 +65,7 @@
|
||||
#include "hbmath.h"
|
||||
#include "hbdbsort.h"
|
||||
#include "hbsxfunc.h"
|
||||
#include "hbstack.h"
|
||||
#include "error.ch"
|
||||
#include "rddsys.ch"
|
||||
#include "hbsxdef.ch"
|
||||
@@ -5318,16 +5319,42 @@ static ERRCODE hb_dbfExists( LPRDDNODE pRDD, PHB_ITEM pItemTable, PHB_ITEM pItem
|
||||
return hb_spFile( ( BYTE * ) szFileName, NULL ) ? SUCCESS : FAILURE;
|
||||
}
|
||||
|
||||
static void hb_dbfInitTSD( void * Cargo )
|
||||
{
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_dbfInitTSD(%p)", Cargo));
|
||||
|
||||
( ( LPDBFDATA ) Cargo )->bTableType = DB_DBF_STD;
|
||||
( ( LPDBFDATA ) Cargo )->bCryptType = DB_CRYPT_NONE;
|
||||
( ( LPDBFDATA ) Cargo )->uiDirtyRead = HB_IDXREAD_CLEANMASK;
|
||||
}
|
||||
|
||||
static void hb_dbfDestroyTSD( void * Cargo )
|
||||
{
|
||||
LPDBFDATA pData;
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_dbfDestroyTSD(%p)", Cargo));
|
||||
|
||||
pData = ( LPDBFDATA ) Cargo;
|
||||
|
||||
if( pData->szTrigger )
|
||||
hb_xfree( pData->szTrigger );
|
||||
if( pData->szPendingTrigger )
|
||||
hb_xfree( pData->szPendingTrigger );
|
||||
if( pData->szPasswd )
|
||||
hb_xfree( pData->szPasswd );
|
||||
if( pData->szPendingPasswd )
|
||||
hb_xfree( pData->szPendingPasswd );
|
||||
}
|
||||
|
||||
static ERRCODE hb_dbfInit( LPRDDNODE pRDD )
|
||||
{
|
||||
PHB_TSD pTSD;
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_dbfInit(%p)", pRDD));
|
||||
|
||||
pRDD->lpvCargo = hb_xgrab( sizeof( DBFDATA ) );
|
||||
memset( pRDD->lpvCargo, 0, sizeof( DBFDATA ) );
|
||||
|
||||
( ( LPDBFDATA ) pRDD->lpvCargo )->bTableType = DB_DBF_STD;
|
||||
( ( LPDBFDATA ) pRDD->lpvCargo )->bCryptType = DB_CRYPT_NONE;
|
||||
( ( LPDBFDATA ) pRDD->lpvCargo )->uiDirtyRead = HB_IDXREAD_CLEANMASK;
|
||||
pTSD = ( PHB_TSD ) hb_xgrab( sizeof( HB_TSD ) );
|
||||
HB_TSD_INIT( pTSD, sizeof( DBFDATA ), hb_dbfInitTSD, hb_dbfDestroyTSD );
|
||||
pRDD->lpvCargo = ( void * ) pTSD;
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
@@ -5338,17 +5365,7 @@ static ERRCODE hb_dbfExit( LPRDDNODE pRDD )
|
||||
|
||||
if( pRDD->lpvCargo )
|
||||
{
|
||||
LPDBFDATA pData = ( LPDBFDATA ) pRDD->lpvCargo;
|
||||
|
||||
if( pData->szTrigger )
|
||||
hb_xfree( pData->szTrigger );
|
||||
if( pData->szPendingTrigger )
|
||||
hb_xfree( pData->szPendingTrigger );
|
||||
if( pData->szPasswd )
|
||||
hb_xfree( pData->szPasswd );
|
||||
if( pData->szPendingPasswd )
|
||||
hb_xfree( pData->szPendingPasswd );
|
||||
|
||||
hb_stackReleaseTSD( ( PHB_TSD ) pRDD->lpvCargo );
|
||||
hb_xfree( pRDD->lpvCargo );
|
||||
pRDD->lpvCargo = NULL;
|
||||
}
|
||||
@@ -5363,7 +5380,7 @@ static ERRCODE hb_dbfRddInfo( LPRDDNODE pRDD, USHORT uiIndex, ULONG ulConnect, P
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_dbfRddInfo(%p, %hu, %lu, %p)", pRDD, uiIndex, ulConnect, pItem));
|
||||
|
||||
pData = ( LPDBFDATA ) pRDD->lpvCargo;
|
||||
pData = ( LPDBFDATA ) hb_stackGetTSD( ( PHB_TSD ) pRDD->lpvCargo );
|
||||
|
||||
switch( uiIndex )
|
||||
{
|
||||
|
||||
@@ -76,12 +76,13 @@
|
||||
#include "hbapilng.h"
|
||||
#include "hbvm.h"
|
||||
#include "hbset.h"
|
||||
#include "hbstack.h"
|
||||
#include "hbrddcdx.h"
|
||||
#include "hbmath.h"
|
||||
#include "rddsys.ch"
|
||||
#include "hbregex.h"
|
||||
|
||||
#define CDXNODE_DATA( p ) ( ( LPDBFDATA ) ( p )->lpvCargo )
|
||||
#define CDXNODE_DATA( p ) ( ( LPDBFDATA ) hb_stackGetTSD( ( PHB_TSD ) ( p )->lpvCargo ) )
|
||||
#define CDXAREA_DATA( p ) CDXNODE_DATA( SELF_RDDNODE( p ) )
|
||||
|
||||
#ifndef HB_CDP_SUPPORT_OFF
|
||||
@@ -8598,7 +8599,7 @@ static ERRCODE hb_cdxRddInfo( LPRDDNODE pRDD, USHORT uiIndex, ULONG ulConnect, P
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_cdxRddInfo(%p, %hu, %lu, %p)", pRDD, uiIndex, ulConnect, pItem));
|
||||
|
||||
pData = ( LPDBFDATA ) pRDD->lpvCargo;
|
||||
pData = CDXNODE_DATA( pRDD );
|
||||
|
||||
switch( uiIndex )
|
||||
{
|
||||
|
||||
@@ -67,6 +67,7 @@
|
||||
#include "hbapierr.h"
|
||||
#include "hbapilng.h"
|
||||
#include "hbset.h"
|
||||
#include "hbstack.h"
|
||||
#include "hbvm.h"
|
||||
#include "hbdate.h"
|
||||
#include "hbrddfpt.h"
|
||||
@@ -77,6 +78,9 @@
|
||||
# include "hbapicdp.h"
|
||||
#endif
|
||||
|
||||
#define FPTNODE_DATA( p ) ( ( LPDBFDATA ) hb_stackGetTSD( ( PHB_TSD ) ( p )->lpvCargo ) )
|
||||
#define FPTAREA_DATA( p ) FPTNODE_DATA( SELF_RDDNODE( p ) )
|
||||
|
||||
#define FPT_BLOCK_OFFSET( b ) ( ( HB_FOFFSET ) ( b ) * \
|
||||
( HB_FOFFSET ) pArea->uiMemoBlockSize )
|
||||
|
||||
@@ -4681,7 +4685,7 @@ static ERRCODE hb_fptInfo( FPTAREAP pArea, USHORT uiIndex, PHB_ITEM pItem )
|
||||
}
|
||||
else
|
||||
{
|
||||
LPDBFDATA pData = ( LPDBFDATA ) SELF_RDDNODE( pArea )->lpvCargo;
|
||||
LPDBFDATA pData = FPTAREA_DATA( pArea );
|
||||
char * szMFileExt;
|
||||
if( pData->szMemoExt[ 0 ] )
|
||||
hb_itemPutC( pItem, pData->szMemoExt );
|
||||
@@ -4983,7 +4987,7 @@ static ERRCODE hb_fptRddInfo( LPRDDNODE pRDD, USHORT uiIndex, ULONG ulConnect, P
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_fptRddInfo(%p, %hu, %lu, %p)", pRDD, uiIndex, ulConnect, pItem));
|
||||
|
||||
pData = ( LPDBFDATA ) pRDD->lpvCargo;
|
||||
pData = FPTNODE_DATA( pRDD );
|
||||
|
||||
switch( uiIndex )
|
||||
{
|
||||
|
||||
@@ -140,6 +140,7 @@
|
||||
#include "hbapilng.h"
|
||||
#include "hbvm.h"
|
||||
#include "hbset.h"
|
||||
#include "hbstack.h"
|
||||
#include "hbmath.h"
|
||||
#include "hbrddntx.h"
|
||||
#include "rddsys.ch"
|
||||
@@ -156,7 +157,7 @@ static RDDFUNCS ntxSuper;
|
||||
static USHORT s_uiRddId;
|
||||
|
||||
|
||||
#define NTXNODE_DATA( p ) ( ( LPDBFDATA ) ( p )->lpvCargo )
|
||||
#define NTXNODE_DATA( p ) ( ( LPDBFDATA ) hb_stackGetTSD( ( PHB_TSD ) ( p )->lpvCargo ) )
|
||||
#define NTXAREA_DATA( p ) NTXNODE_DATA( SELF_RDDNODE( p ) )
|
||||
|
||||
#define hb_ntxKeyFree(K) hb_xfree(K)
|
||||
@@ -6086,6 +6087,7 @@ static ERRCODE ntxOrderCreate( NTXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo )
|
||||
szTagName[ NTX_MAX_TAGNAME + 1 ], * szKey, * szFor = NULL;
|
||||
LPNTXINDEX pIndex, * pIndexPtr;
|
||||
LPTAGINFO pTag = NULL;
|
||||
LPDBFDATA pData;
|
||||
ERRCODE errCode;
|
||||
ULONG ulRecNo;
|
||||
BOOL fCompound, fTagName, fBagName, fProd, fLocked = FALSE,
|
||||
@@ -6223,6 +6225,7 @@ static ERRCODE ntxOrderCreate( NTXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo )
|
||||
|
||||
SELF_GOTO( ( AREAP ) pArea, ulRecNo );
|
||||
|
||||
pData = NTXAREA_DATA( pArea );
|
||||
/*
|
||||
* abBagName -> cBag, atomBagName -> cTag
|
||||
* The following scheme implemented:
|
||||
@@ -6237,7 +6240,7 @@ static ERRCODE ntxOrderCreate( NTXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo )
|
||||
#if defined( HB_NTX_NOMULTITAG )
|
||||
fCompound = FALSE;
|
||||
#else
|
||||
fCompound = fTagName && NTXAREA_DATA( pArea )->fMultiTag;
|
||||
fCompound = fTagName && pData->fMultiTag;
|
||||
#endif
|
||||
hb_ntxCreateFName( pArea, ( char * ) ( ( fBagName || fCompound ) ?
|
||||
pOrderInfo->abBagName : pOrderInfo->atomBagName ),
|
||||
@@ -6412,7 +6415,7 @@ static ERRCODE ntxOrderCreate( NTXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo )
|
||||
pTag = hb_ntxTagNew( pIndex, szTagName, fTagName,
|
||||
szKey, pKeyExp, bType, (USHORT) iLen, (USHORT) iDec,
|
||||
szFor, pForExp,
|
||||
fAscend, pOrderInfo->fUnique, fCustom, NTXAREA_DATA( pArea )->fSortRecNo );
|
||||
fAscend, pOrderInfo->fUnique, fCustom, pData->fSortRecNo );
|
||||
pTag->Partial = ( pArea->lpdbOrdCondInfo && !pArea->lpdbOrdCondInfo->fAll );
|
||||
|
||||
if( ! pIndex->Compound )
|
||||
@@ -6480,8 +6483,7 @@ static ERRCODE ntxOrderCreate( NTXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo )
|
||||
*pIndexPtr = pIndex;
|
||||
}
|
||||
if( pIndex->Production && !pArea->fHasTags &&
|
||||
NTXAREA_DATA( pArea )->fStruct &&
|
||||
( NTXAREA_DATA( pArea )->fStrictStruct || hb_setGetAutOpen() ) )
|
||||
pData->fStruct && ( pData->fStrictStruct || hb_setGetAutOpen() ) )
|
||||
{
|
||||
pArea->fHasTags = TRUE;
|
||||
if( !pArea->fReadonly && ( pArea->dbfHeader.bHasTags & 0x01 ) == 0 )
|
||||
@@ -7481,7 +7483,7 @@ static ERRCODE ntxInit( LPRDDNODE pRDD )
|
||||
if( errCode == SUCCESS )
|
||||
NTXNODE_DATA( pRDD )->fMultiTag = TRUE;
|
||||
#endif
|
||||
|
||||
|
||||
return errCode;
|
||||
}
|
||||
|
||||
|
||||
@@ -319,6 +319,24 @@ void * hb_stackTestTSD( PHB_TSD pTSD )
|
||||
#endif
|
||||
}
|
||||
|
||||
void hb_stackReleaseTSD( PHB_TSD pTSD )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_stackReleaseTSD(%p)", pTSD));
|
||||
|
||||
if( pTSD->iHandle && pTSD->iHandle <= hb_stack.iTSD &&
|
||||
hb_stack.pTSD[pTSD->iHandle].value )
|
||||
{
|
||||
if( pTSD->pCleanFunc )
|
||||
pTSD->pCleanFunc( hb_stack.pTSD[pTSD->iHandle].value );
|
||||
hb_xfree( hb_stack.pTSD[pTSD->iHandle].value );
|
||||
hb_stack.pTSD[pTSD->iHandle].value = NULL;
|
||||
hb_stack.pTSD[pTSD->iHandle].pTSD = NULL;
|
||||
pTSD->iHandle = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void hb_stackInit( void )
|
||||
{
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_stackInit()"));
|
||||
|
||||
Reference in New Issue
Block a user