home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / CLIPPER / DATABASE / CLIP52B.ZIP / README.52B < prev   
Encoding:
Text File  |  1993-06-27  |  12.8 KB  |  267 lines

  1. Dear CA-Clipper 5.2 Developer:
  2.  
  3.                 Before downloading the new patch files for bringing your 
  4.         CA-Clipper 5.2 product to the 5.2b level, you must first 
  5.         determine the level you are currently at: 5.20 or 5.2a.   To 
  6.         find out which level you are at, simply check the time stamp on
  7.         the CLIPPER.EXE that is installed on your system.  5.20 has a 
  8.         timstamp of 5:20 AM.  5.2a has a time stamp of 5:21 AM.  The 
  9.         level you are at determines which EXE file to download.
  10.  
  11.                 If you are currently at the 5.20 level, download 
  12.         52BUS.EXE.
  13.  
  14.                 If you have already upgraded to 5.2a and now want to get
  15.         to 5.2b, download 52ABUS.EXE.
  16.  
  17.                 If you mistakenly download the wrong file and attempt 
  18.         the patching process, you will receive an error message 
  19.         indicating that the patch will not work.  Once you have 
  20.         downloaded the correct file,  execute it and follow the 
  21.         instruction found in the appropriate readme file.
  22.  
  23.  
  24. ================================================================================
  25.  
  26.         The problems resolved by CA-Clipper 5.2B include:
  27.  
  28.  
  29.         1.     Fixed a Virtual Memory Integrity Failure in
  30.                FOPEN() when the file name is numeric instead
  31.                of a character string.
  32.  
  33.         2.     Fixed a Virtual Memory Integrity Failure when
  34.                calling AADD() to increase the size of an
  35.                array.
  36.  
  37.         3.     Fixed a Virtual Memory Integerity Failure
  38.                that occured when an ACHOICE() user function
  39.                deleted elements from the menu selection
  40.                array.  ACHOICE() now allows the user
  41.                function to add, delete, or modify existing
  42.                elements without causing any problems in
  43.                ACHOICE().
  44.  
  45.         4.     Fixed a Virtual Memory Integrity Failure in
  46.                the Internal Runtime Event System.  This was
  47.                causing the DBFCDX driver to hang as well as
  48.                various "unexplainable" errors.
  49.  
  50.         5.     Fixed a Virtual Memory Integrity Failure in
  51.                the debugger when viewing multiple nested
  52.                arrays.  Tbrowse was producing a parameter
  53.                error when viewing multiple nested arrays.
  54.                In some instances this produced a Virtual
  55.                Memory Integrity Failure.
  56.  
  57.         6.     Fixed a Virtual Memory Integrity Failure in
  58.                the debugger's memory allocator.   (STAR
  59.                Issue# 737689)
  60.  
  61.         7.     Fixed INDEXKEY() memory corruption problem.
  62.                INDEXKEY() would occasionally return a
  63.                garbage string when called repeatedly.  This
  64.                sometimes caused a Virtual Memory Integrity
  65.                Failure.
  66.  
  67.         8.     Fixed MEMOEDIT() buffer memory corruption
  68.                problem.  This occurred when MEMOEDIT() was
  69.                called with a user defined function.  This
  70.                would result in various memory related errors
  71.                including a Virtual Memory Integrity Failure.
  72.  
  73.         9.     Fixed slow disk I/O on replaces on large
  74.                DBF's with non-unique indexes.  The
  75.                performance has been improved to a speed
  76.                which is comparable to CA-Clipper 5.01a.
  77.  
  78.        10.     Fixed the releasing of all relations (in all
  79.                workareas) when any child dbf was closed.
  80.                Now closing a child database releases only
  81.                the relations that it is involved with.
  82.  
  83.        11.     Fixed the DBFNDX Replaceable Database Driver
  84.                so that it now properly seeks on a date value
  85.                with SET DELETED ON.
  86.  
  87.        12.     Fixed DBCREATE() to properly return a NIL
  88.                value as documented.
  89.  
  90.        13.     Fixed INDEXORD() so that it now returns a
  91.                zero when no database is open rather than
  92.                generating a runtime error.
  93.  
  94.        14.     Fixed some occurances of internal error 1210
  95.                (database and index are out of sync).
  96.  
  97.        15.     Fixed many occurances of internal error 415
  98.                (can not open external overlay file).
  99.  
  100.        16.     Fixed the Runtime Memory Manager so that it
  101.                now returns an EG_MEM (5300 "Memory Low
  102.                Warning") before generating a memory
  103.                exhausted error.
  104.  
  105.        17.     Fixed Runtime failures that occured when
  106.                CA-Clipper mistakenly tried to use
  107.                non-existent EMS memory.
  108.  
  109.        18.     Fixed FREAD() so that it does not modify
  110.                variables that it shouldn't have access to.
  111.  
  112.        19.     Fixed BROWSE() so that it no longer
  113.                causes the repositioning of a file to BOF()
  114.                when editing takes place in a new record.
  115.  
  116.        20.     Fixed the debugger so that it is no longer
  117.                necessary to specify the default file extension
  118.                (.PRG or .PPO) when opening a file.
  119.  
  120.        21.     Fixed the debugger so that it correctly searches
  121.                the path (indicated by the PATH environment variable)
  122.                when searching for a file to open.
  123.  
  124.        22.     Fixed the debugger so that it does not
  125.                produce "Argument error +" when the F6 key is
  126.                pressed to view databases.
  127.  
  128.        23.     Fixed DBU so it now correctly parses a
  129.                file name that contained a drive letter and
  130.                colon (:) but no backslash (\) (such as
  131.                C:TEMP).
  132.  
  133.        24.     Fixed numerous bugs in the R.L. utility.
  134.  
  135.        25.     Fixed the compiler screen to include the
  136.                missing /t and /z options in order to match
  137.                the documented options.
  138.  
  139.        26.     Fixed the spelling of OrdDestory to
  140.                OrdDestroy in STD.CH for the DELETE TAG
  141.                command.
  142.  
  143.        27.     Fixed the "Guide to CA-Clipper" .NG file so
  144.                that the Norton Guide engine may now be
  145.                unloaded from memory.
  146.  
  147.  
  148. ================================================================================
  149.  
  150.  
  151.         Technical Note: The Virtual Memory Integrity Failure Error Message
  152.  
  153.  
  154.             The Virtual Memory Integrity Failure error message
  155.         (or VMIF for short) refers to a problem that is neither well 
  156.         documented nor well understood.  In this technical note, we will
  157.         explore what the VMIF message indicates, some of the common 
  158.         reasons it occurs, and what measures to take if  you encounter 
  159.         one.
  160.  
  161.             CA-Clipper uses a virtual memory manager to allow 
  162.         applications to access more strings, arrays, and objects than
  163.         conventional memory would otherwise allow.  It accomplishes 
  164.         this by swapping information to and from expanded memory or 
  165.         disk as needed.  Each virtual data item (called a segment) has
  166.         an entry in a descriptor table that maintains its current 
  167.         location and length.  A segment's length can be up to 65,518 
  168.         bytes, while its location may be conventional memory (resident),
  169.         disk or EMS (non-resident).  When CA-Clipper receives a request
  170.         for non-resident data, it always checks the segment's descriptor
  171.         entry to ensure that it's length is non-zero.  Any descriptor 
  172.         whose length is zero is, by definition, invalid because VM does
  173.         not allow zero-byte segments.  Thus, a zero length segment is 
  174.         interpreted as a corruption, and the VMIF error message is 
  175.         displayed. 
  176.  
  177.             Along with the VMIF message is a hexadecimal address that 
  178.         indicates the address of the corrupted descriptor table element.
  179.         This information may be useful to the CA-Clipper Technical 
  180.         Support as well as the development staff.  C and Assembler 
  181.         programmers may also find this information useful in determining
  182.         if and how their code caused the corruption.  A special case is
  183.         the address 0000:0000.  It indicates that a NULL and (possibly
  184.         uninitialized) pointer was used to access virtual data.
  185.  
  186.             While it is true that the VMIF message occurs for
  187.         exactly one condition, that condition can be created in many 
  188.         different ways.  Research indicates that the conditions that 
  189.         lead to a VMIF can be broken down into three distinct 
  190.         categories.
  191.  
  192.             First, several VMIFs can be attributed to Clipper 
  193.         programming bugs.  While a VMIF should never occur solely on 
  194.         the basis of executing Clipper code, a combination of inadequate
  195.         error detection on the part of Clipper runtime and a violation
  196.         of proper programming practices may cause the error to occur.  
  197.         Examples of this have been: calling FOPEN() with numeric data 
  198.         for the file name, deleting array elements from within an 
  199.         ACHOICE() UDF, and assigning NIL to any TBROWSE instance 
  200.         variable that requires a character value.  (Please note that 
  201.         the TBROWSE VMIFs were fixed in the 5.01a release and the 
  202.         ACHOICE() and FOPEN() VMIFs are fixed in the 5.2b release by 
  203.         producing an error when improper values are used.)
  204.  
  205.             The second category is within the CA-Clipper runtime 
  206.         support libraries.  CA-Clipper's runtime support libraries 
  207.         constantly issue calls to the VM system throughout the normal 
  208.         execution of a Clipper application.  On occasion, specific 
  209.         conditions pertaining to runtime activities are not properly 
  210.         handled internally, creating conditions that eventually result 
  211.         in a VMIF.  These instances are always considered problems by 
  212.         the development staff.
  213.  
  214.             The last category is external code typically written in
  215.         C or Assembler by CA-Clipper programmers and third party library
  216.         developers.  These are usually caused by improper use of one of
  217.         CA-Clipper's APIs or by changing the functionality of something 
  218.         within CA-Clipper's runtime that is assumed to remain constant.
  219.  
  220.             Although CA-Clipper's VM system provides detection and 
  221.         reporting, it is almost never the cause of a VMIF.
  222.  
  223.             VMIFs are commonly detected long after the actual 
  224.         corruption occurred.  A module may store a zero-length segment 
  225.         in the segment descriptor table either through use of VM or by
  226.         writing to a wild pointer.  This corruption will not be detected
  227.         until a VM segment is accessed that requires the corrupted 
  228.         segment to be discarded, or swapped to disk or EMS.  The Clipper
  229.         VM subsystem is demand-based.  This means that it only performs
  230.         swapping when swapping is absolutely required.  If a VMIF 
  231.         consistently occurs at a specific point in the execution of an 
  232.         application, it is often not actually caused at this point.  It 
  233.         tells us that a corruption has occurred, but has no means for 
  234.         determining the cause of the corruption or when the corruption 
  235.         actually occurred.
  236.  
  237.             Because VMIFs are detected when the VM system attempts 
  238.         to swap in memory, a change in the amount of conventional memory
  239.         available when an application is executed changes the 
  240.         possibility of the VMIF occurring.  When sufficient real memory
  241.         is available, VM has no need to perform any swapping and any 
  242.         possible VMIFs will not be detected.  When less real memory is 
  243.         available to an application, the entire profile of swapping is 
  244.         changed, and may prevent the VMIF from occurring in a constant 
  245.         location.
  246.  
  247.             This raises the question of how to ensure that the VM 
  248.         system is being called during the testing phase of application 
  249.         development.  A simple and effective method is to use 
  250.         CA-Clipper's //X: parameter to decrease the available memory as 
  251.         much as is feasible.  This will ensure that the VM system will 
  252.         be called with the most frequency.  (The //X: parameter is 
  253.         detailed in the Runtime Environment chapter of the CA-Clipper 5.2 
  254.         Programming and Utilities Guide.)
  255.  
  256.             If a VMIF occurs, try to determine how to reproduce the 
  257.         problem at will and if possible, isolate it to a small example 
  258.         and immediately contact your CA-Clipper Technical Support 
  259.         Representative.  The CA-Clipper Quality Assurance team is also 
  260.         constantly searching for occurrences of VMIFs.  Either way, the 
  261.         CA-Clipper Development team is anxious to correct all internal 
  262.         VMIFs as quickly as possible.
  263.  
  264.  
  265. ================================================================================
  266. ================================================================================
  267.