diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 346fcd9b61..f15bbf53a4 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -16,6 +16,19 @@ The license applies to all entries newer than 2009-04-28. */ +2011-12-07 16:24 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) + * harbour/debian/changelog + * harbour/debian/rules + * changed version number to 3.1.0-1 + * removed HB_BUILD_DEBUG=yes + * use 'dh_prep' instead of deprecated 'dh_clean -k' + + * harbour/src/rtl/gttrm/gttrm.c + ! fixed my C&P typo in HB_TRACE() message + + + harbour/doc/locks.txt + + added descirption of DBF locking schemes + 2011-12-07 10:54 UTC+0100 Viktor Szakats (harbour.01 syenar.hu) * INSTALL + added the word 'binary' to 3rd party pkg requirements diff --git a/harbour/debian/changelog b/harbour/debian/changelog index 041c764d8f..6e4f74519f 100644 --- a/harbour/debian/changelog +++ b/harbour/debian/changelog @@ -1,8 +1,16 @@ +harbour (3.1.0-1) unstable; urgency=low + + * 3.1.0-1 + * removed HB_BUILD_DEBUG=yes + * use 'dh_prep' instead of deprecated 'dh_clean -k' + + -- Przemyslaw Czerpak Wed, 07 Dec 2011 08:34:30 +0200 + harbour (3.0.0-1) unstable; urgency=low * 3.0.0-1 - -- Przemyslaw Czerpak Sun, 17 Jul 2011 22:00:00 +0200 + -- Przemyslaw Czerpak Sun, 17 Jul 2011 22:00:00 +0100 harbour (2.0.0-1) unstable; urgency=low diff --git a/harbour/debian/rules b/harbour/debian/rules index e2d788681a..76d130a89d 100755 --- a/harbour/debian/rules +++ b/harbour/debian/rules @@ -28,7 +28,6 @@ endif export HB_SYSLOC := yes export HB_BUILD_PKG := no export HB_BUILD_SHARED := yes -export HB_BUILD_DEBUG := yes ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) export HB_BUILD_OPTIM := no endif @@ -54,7 +53,7 @@ clean: install: build dh_testdir dh_testroot - dh_clean -k + dh_prep dh_installdirs $(MAKE) install diff --git a/harbour/doc/locks.txt b/harbour/doc/locks.txt new file mode 100644 index 0000000000..4a8703f863 --- /dev/null +++ b/harbour/doc/locks.txt @@ -0,0 +1,180 @@ +/* + * $Id$ + */ + +Locking schemes used with DBF files. +Przemyslaw Czerpak (druzus/at/poczta.onet.pl) + + +Exclusive/shared modes (DENY READ, DENY WRITE) in POSIX systems. +================================================================ + +Exclusive modes (DENY READ, DENY WRITE) do not exist in POSIX systems. +They can be emulated by fcntl() or flock() locks. Harbour uses flock() +in systems where it does not create conflicts with fcntl() locks used +to synchronize file access by different processes in shared mode. +Currently it's enabled by default only in Linux (tests with *BSD systems +and MacOSX showed that it interacts with fcntl locks causing deadlocks). +On other POSIX systems Harbour uses fcntl() read and write locks at +address 0x7fffffff (size 1) to simulate shared and exclusive mode. + +CLIP and FlagShip use fcntl() locks to simulate shared/exclusive modes. +CLIP shared/exclusive flag: 0x7fffffff : 1 (the same as Harbour) +FlagShip shared/exclusive flag: 0x7ffffbfc : 1 + + + + +File access synchronization (record and file locking) in shared mode. +===================================================================== + +FlagShip uses different record and index locking schemes +(i.e. for RLOCK it locks record area) and it is not described +here. + + +In documentation CLIP can use Clipper like or FoxPro like locking +schemes and it can be controlled by SET LOCKSTYLE [TO] ... command +or SET( _SET_LOCKSTYLE, 0 | 1 ) function. +This switch only changes the RLOCK/FLOCK offset. +For: + SET LOCKSTYLE [TO] CLIPPER | CLIPPER50 | CLIPPER53 +or: + SET( _SET_LOCKSTYLE, 0 ) +this offset is set to 1'000'000'000. This is header lock address +and records are locked at above address + record number. +This is compatible with standard Clipper locking. +Commands: + SET LOCKSTYLE [TO] CLIPPER52 | FOXPRO | SIX +or: + SET( _SET_LOCKSTYLE, 1 ) +set this offset is to 0x10000000 keeping the same algorithm +for record locking what is incompatible with any other locking +schemes known by me. For sure it's not compatible with [V]FP +locking (see details about this locking scheme below). +For more information look at CLIP source code. + + + + +(*) In Harbour index read locks are shared on platforms which support + shared (read) locks. + +Clipper DBFNTX locking: +======================= +all locks are exclusive (*) +DBF HEADER LOCK: @1000000000 : 1 (exclusive) +DBF RECORD LOCK: @1000000000 + recNO : 1 (exclusive) +DBF FLOCK SIZE: 1000000000 + => maximum records: 3'294'967'295 + maximum file size in non POSIX systems: 1'000'000'000 + +NTX READ LOCK: @1000000000 : 1 (exclusive) +NTX WRITE LOCK: @1000000000 : 1 (exclusive) + +In Harbour it's DB_DBFLOCK_CLIPPER. + + +Clipper new DBFNTX locking (ntxlock2.obj): +========================================== +all locks are exclusive (*) +DBF HEADER LOCK: @4000000000 : 1 (exclusive) +DBF RECORD LOCK: @4000000000 + recNO : 1 (exclusive) +DBF FLOCK SIZE: 294967295 + => maximum records: 294'967'295 + maximum file size in non POSIX systems: 4'000'000'000 + +NTX READ LOCK: @1000000000 : 1 (exclusive) +NTX WRITE LOCK: @1000000000 : 1 (exclusive) + +In Harbour it's DB_DBFLOCK_CLIPPER2. + + +CL52 DBFCDX, SIX3 SIXCDX, SIX3 SIXNSX, [V]FP CDX +================================================ +all locks are exclusive (*) +when there is no structural index: +DBF HEADER LOCK: @0x40000000 : 1 +DBF RECORD LOCK: @0x40000000 + record offset : 1 (some implementations + locks whole record) +DBF FLOCK SIZE: 0x3ffffffd + => maximum file size: 1'073'741'823 + +when structural index is open: +DBF HEADER LOCK: @0x7ffffffe : 1 +DBF RECORD LOCK: @0x7ffffffe - recNO : 1 +DBF FLOCK SIZE: 0x07ffffff + => maximum records: 134'217'727 + maximum file size in non POSIX systems: 2'013'265'919 + +index file locking is the same for production and normal indexes: +CDX READ LOCK: @0x7ffffffe : 1 +CDX WRITE LOCK: @0x7ffffffe : 1 + +In Harbour it's DB_DBFLOCK_VFP. + + +CL53 DBFCDX, COMIX (hyper locking) +================================== +all locks are exclusive (*), in index shared locks are emulated + +DBF HEADER LOCK: @1000000000 : 1 +DBF RECORD LOCK: @1000000000 + recNO : 1 +DBF FLOCK SIZE: 1000000000 + => maximum records: 1'000'000'000 + maximum file size in non POSIX systems: 1'000'000'000 + +CDX READ LOCK: @0xffff0000 + random value from 0x0 to 0xffff : 1 +CDX WRITE LOCK: @0xfffeffff : 0x10001 + if fail then @0xfffeffff : 1 + prepare the index modification in memory and before writing to + index file lock @0xffff0000 : 0x10000 + to eliminate starvation effect caused by many readers + on each 16-th read lock reading process tries to lock write + area @0xfffeffff : 1 instead and then sets normal read lock + +In Harbour it's DB_DBFLOCK_COMIX. + + +HARBOUR 32-bit locking +====================== +all locks are exclusive (*), in index shared locks are emulated + +DBF HEADER LOCK: @4000000000 : 1 (exclusive) +DBF RECORD LOCK: @4000000000 + recNO : 1 (exclusive) +DBF FLOCK SIZE: 294967295 + => maximum records: 294'967'295 + maximum file size in non POSIX systems: 4'000'000'000 + +CDX READ LOCK: @0xffff0000 + random value from 0x0 to 0xffff : 1 +CDX WRITE LOCK: @0xfffeffff : 0x10001 + if fail then @0xfffeffff : 1 + prepare the index modification in memory and before writing to + index file lock @0xffff0000 : 0x10000 + to eliminate starvation effect caused by many readers + on each 16-th read lock reading process tries to lock write + area @0xfffeffff : 1 instead and then sets normal read lock + +In Harbour it's DB_DBFLOCK_HB32. + + +HARBOUR 64-bit locking +====================== +all locks are exclusive (*), in index shared locks are emulated + +DBF HEADER LOCK: @0x7fffffff00000001 : 1 +DBF RECORD LOCK: @0x7fffffff00000001 + recNO : 1 +DBF FLOCK SIZE: 0xfffffffeUL + => maximum records: 4'294'967'294 + maximum file size: no limits created by locks + +CDX READ LOCK: @0x7fffffff00000000 + random value from 0x1 to 0xffff : 1 +CDX WRITE LOCK: @0x7fffffff00000000 : 0x10001 + if fail then @0x7fffffff00000000 : 1 + prepare the index modification in memory and before writing to + index file lock @0x7fffffff00000001 : 0x10000 + to eliminate starvation effect caused by many readers + on each 16-th read lock reading process tries to lock write + area @0x7fffffff00000000 : 1 instead and then sets normal read lock + +In Harbour it's DB_DBFLOCK_HB64. diff --git a/harbour/src/rtl/gttrm/gttrm.c b/harbour/src/rtl/gttrm/gttrm.c index 909a6e8aa4..3283d9ba8a 100644 --- a/harbour/src/rtl/gttrm/gttrm.c +++ b/harbour/src/rtl/gttrm/gttrm.c @@ -2241,7 +2241,7 @@ static void hb_gt_trm_ResetPalette( PHB_GTTRM pTerm ) static void hb_gt_trm_SetTitle( PHB_GTTRM pTerm, const char * szTitle ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_trm_SetTitle(%p,%d)", pTerm, iIndex)); + HB_TRACE(HB_TR_DEBUG, ("hb_gt_trm_SetTitle(%p,%s)", pTerm, szTitle)); if( pTerm->terminal_type == TERM_XTERM || ( pTerm->terminal_ext & TERM_PUTTY ) )