2014-03-16 19:54 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
  * include/hbapifs.h
  * src/rtl/filebuf.c
    * move HB_FILE_TYPE_MAX definition to header file
    % include C stat() header only in *nix builds

  * src/pp/ppcore.c
    ! force stringify when illegal characters are included inside
      square brackets []
2014-03-16 20:22 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
  * contrib/rddads/adsx.c
    * pacified warnings
2014-03-20 04:01 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
  * include/hbapifs.h
  * src/rtl/filebuf.c
  * src/rtl/filebufd.c
  * contrib/hbcomio/comio.c
  * contrib/hbmemio/memio.c
  * contrib/hbnetio/netiocli.c
  * contrib/hbtcpio/tcpio.c
    * changed internal FILE IO API. Now all functions which do
      not operate on PHB_FILE receive pointer to function table
      (PHB_FILE_FUNCS) used by given redirector.

  * src/rtl/vfile.c
    * open wirtual files in READWRITE mode by default
    * translate FO_* attributes to FXO_* ones

  * src/vm/classes.c
    ! fixed typo in RTE message

  * src/vm/garbage.c
    * use different error code (1301/1302) for destructor RTE

  * src/rtl/gtxwc/gtxwc.c
  * src/rtl/gtxwc/gtxwc.h
    + added support for HB_GTI_FONTWEIGHT with HB_GTI_FONTW_* actions

  * contrib/hbpgsql/rddcopy.c
    ! fixed memory leak
    % encapsulate PQ calls in hb_vmUnlock()/hb_vmLock() to not stop
      other threads when GC is activated
2014-03-19 21:27 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com)
  * contrib\gtwvg\hbgtwvg.ch
    + Added: #define GOBJ_OBJDATA_PICTUREEX            10
             #define GOBJ_OBJTYPE_LABEL_EX2            21

  * contrib\gtwvg\gtwgud.c
  * contrib\gtwvg\gtwvgd.c
    % Changed: WM_CLOSE firing K_ESC => HB_K_CLOSE in accordance rest of GTs.

  * contrib\gtwvg\wvgcuig.c
    % Changed: hb_wvg_RefreshRect() flag to erase background: FALSE => TRUE.
    % Changed: WVG_SETGOBJDATA() now returns lSUCCESS or lFAILURE.
    + Added: new CGUI object type - GOBJ_OBJDATA_PICTUREEX.
    + Added: new function
        Wvg_LabelEx2( nTop, nLeft, nBottom, nRight, aPxlOff, cLabel, nAlign,
                  nEscapement, nTextColor, nBkColor, cFontFace, nFontHeight,
                     nFontWidth, nFontWeight, nQuality,  nCharSet, lItalics,
                      lUnderline, lStrikeOut )
    + Added: 7th parameter [<lDoNotScale>] in
       Wvg_Picture( nTop, nLeft, nBottom, nRight, aPxlOff, nSlot, lDoNotScale )
    % Changed: hb_wvg_RenderPicture() code to honor scaled vs non-scaled
       rendering.

  * contrib\gtwvg\wvgutils.c
    ! Fixed: Wvt_ChooseFont() to return correctly array of 9 elements
       instead of 8.
! Fixed BOM issue in ChangeLog.txt
2014-03-20 14:59 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
  * src/rtl/filesys.c
    ! added workaround for offset returned by FSeek( hDir, 0, FS_END )
      for directories handles in some *nixes
2014-03-24 22:19 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
  * include/Makefile
  + include/hbiousr.ch
  * src/rtl/Makefile
  + src/rtl/iousr.c
    + added module for writting Harbour FILE IO redirectors at PRG level

  + tests/iotcp.prg
    + example code for FILE IO redirector written in PRG.
      It's IOTCP and gives exactly the same functionality as TCP redirector
      in contrib which is written in C.

  * src/vm/runner.c
    % modified internal structure to eliminate some memory allocations

  * contrib/hbpgsql/rddcopy.c
    % small simplification
2014-03-25 00:38 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
  * tests/iotcp.prg
    ! fixed typo in macro name - thanks to Itamar for the info
2014-03-26 14:10 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
  * src/vm/garbage.c
    ! added protection for activating GC from thread with unlocked HVM stack
      when other thread is already executing GC passes. Such situation does
      not happen in core code and the protections is only just in case.

  * src/vm/hvm.c
    ! do not release HVM thread STOP signal when GC mark pass is activated.
      It was very serious bug which could cause memory corruption when
      thread unlocked HVM stack what allow to start GC mark pass by other
      thread and then locked HVM and begin to change complex variables
      still scanned by the GC thread. This problem have existed from the
      beginning when I committed initial version of Harbour MT support.
      I do not remember why I added code to remove the STOP signal - probably
      I was experimenting with some new things working on Harbour MT code
      and I forgot to deactivate it.
      NOTE: 3-rd party developers who use GC collectible pointer items
            must not activate any PRG code execution inside their mark
            functions.
2014-03-26 14:30 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
  * utils/hbtest/rt_class.prg
    * updated to follow modified RTE codes
2014-03-27 15:03 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
  * contrib/rddads/ads1.c
    * do not call memset() with zero length

  * include/hbapi.h
  * src/vm/fm.c
    + added new FM statistic C function:
         const char * hb_xinfo( void * pMem, HB_USHORT * puiLine );

  * src/rtl/filebufd.c
  * src/rtl/iousr.c
    * modified casting to pacify more restrictive strict aliasing warnings

  * src/vm/garbage.c
    * minor formatting
2014-03-27 16:13 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
  * contrib/hbpgsql/rddcopy.c
    ! fixed typos in my recent modification and potential memory corruption
      and/or wrong output due to ugly hack for last field terminator in old
      code. Thanks to Aleksander Czajczynski for reporting the problem.
2014-04-01 12:33 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
  * src/rtl/filebuf.c
    ! unlock HVM stack before locking local mutex and calling hb_fs*()
      functions which also unlocks HVM. It fixes possible deadlock condition
      when hb_gcAll( .T. ) is executed.

  * include/hbapi.h
  * src/vm/garbage.c
    ! changed mark function semantic.
      Adding support for user defined mark function I created race condition
      in MT GC code. It happens because blocks marked as deleted were not
      scanned by GC mark code so their subitems where not accessible.
      To fix it we have to change mark function semantic. Now mark function
      can be executed also for blocks currently deleted. It means that GC
      block destructor should clean references to just removed items and
      subblocks. The best place to make it is clearing pointers to GC blocks
      just after hb_itemRelease() or hb_gcRefFree().
      It is save to clean the reference just before hb_itemRelease() or
      hb_gcRefFree() but only for the single block passed to these functions.
      It is not save to clear reference to more then one block and then
      execute above functions.
    + check reference count after destructor execution for all blocks
      not only arrays - warning it may exploit some wrong C code.
    - removed not longer used hb_gcRefCheck() function.

  * include/hbvm.h
  * src/vm/hvm.c
    + added new internal function hb_vmLockForce()
    ! fixed to mark GC blocks with active threads

  * src/vm/thread.c
  * include/hbthread.h
    % modified sync mutexes used by xBase++ signal class emulation
      to not use item array internally
    * updated mutex destructor to new GC mark semantic
    ! mark GT items if GT is bound with thread item
    ! fixed mutex notify/subscribe code to not change GC items
      when HVM stack is unlocked
    ! use hb_vmLockForce() to eliminate potential deadlock
    + added new C function hb_threadEnterCriticalSectionGC().
      It should be used instead of hb_threadEnterCriticalSection()
      in code which manipulates GC items inside critical section.
      It's slower but eliminates possible deadlock condition.
      Please remember that remember that both functions cannot
      be used for the same mutex. So if it's necessary to use
      hb_threadEnterCriticalSectionGC() in one place then it
      has to be used in all others when the same mutex is locked.

  * src/vm/arrays.c
  * src/vm/codebloc.c
  * src/vm/hashes.c
  * src/rtl/hbgtcore.c
  * contrib/hbcurl/core.c
  * contrib/hbexpat/core.c
    * updated destructors to new GC mark semantic

  * contrib/hbxpp/dllx.c
    ! fixed destructor for pointer item created by DllPrepareCall()
      Now it respects reference counter.
    ; added note about real behavior of library handle destructor,
      I haven't changed existing code behavior but maybe it should
      be done.

  * contrib/xhb/hbserv.c
  * src/debug/dbgentry.c
  * src/rdd/wacore.c
    ! fixed possible deadlocks by using hb_threadEnterCriticalSectionGC()
      instead of hb_threadEnterCriticalSection().

  * contrib/hbmemio/memio.c
    ! slightly modified hb_memfsDirectory() code to avoid race condition
      without using hb_threadEnterCriticalSectionGC()

  * src/vm/fm.c
    % reduce the lock range in HB_FM_STAT builds

  * src/rtl/hbsocket.c
    ! added missing HVM stack unlocking in hb_socketSelect() function

  * src/rtl/gtxwc/gtxwc.c
    ! added few missing locks for version compiled with HB_XWC_XLIB_NEEDLOCKS

  * src/rdd/dbtotal.prg
    * allow to use symbols instead of codeblocks
    * modified Harbour extension which uses ordKey() as default group
      signature to work also without index. In such case all records
      are summarized into single one.

  ; Most of above modifications were critical for stability of MT programs.
    They should allow to activate GC in any place.
Merge branch 'master' into F18_master