Bug descriptions for : BTRIEVE (DOS, OS/2, Windows, & NLM) BSERVER(VAP), BUTIL, BTRTOOLS Requester (DOS & OS2) 1. Bserver (vap) Note: Not a really a bug, but an improvement! If a GET DIRECT operation would return a record which has a null value in the key field specified by key number (and the key allows duplicates) then status 82 returned. This is a correct status code. However, sometimes the user is not interested in positioning by any of the keys, but he simply just wants to retrieve the record. To achieve this, a new option is pro- vided by this patch: the user can specify -1 in the key number and then ONLY the data will be returned (and of course, no status 82 will be repor- ted). 2. Bserver (vap) Files with variable size records can become corrupted (on its variable pages) if the page size is at least 1024 and the user stores a lot of records with extremely short (1 or a few bytes long) variable parts. 3. Bserver (vap) Files can be left open on a server if another connected server crashes and Netware SQL has opened these files previously from the crashed server. 4. Bserver (vap) If 2 workstations hold record locks on the same file and then they both start a transaction and attempt to get a record from this file (i.e. try to lock the file), then both stations will be locked up, without getting a status 78 ("deadlock detected") on one of the stations. 5. Bserver (vap) Any file access (get,step,etc.) can return an erroneous status 85 (was previously documented here as an 84- "File in use") in a "no-wait" transaction (op code 219) or can lock up in a regular transaction (op code 19) if this station (say Station 1) is holding a record lock on the file BEFORE it issues the BEGIN TRANSACTION and another station (say Station 2) had opened the file earlier than Station 1. 6. Bserver (vap) If the user passes Btrieve a file name in an illegal format (i.e. more than 8 characters as name or more than 3 characters as extension) then Brieve stores it as it is given. However, Netware 286 drops the extra letters and will open a file which matches the re-formatted name (e.g if given: "abcdefghij.klmno" then file "abcdefgh.klm" is opened if it exists). This can cause a status 94 for another open if that other open is not getting the same, "miss-spelled" name. This patch will make sure that Btrieve will always store internally the file name as it exists in reality. 7. Bserver (vap) When all workstations are shut down on an ArcNet network, the VAP operating system returns an error to all VAPs using the Service Advertising Protocol. This causes Bserver to issue an Error-Log message of "Send Failure in Advertiser". This patch is normally commented-out, but may be enabled by users who find their error logs clogged up. 8. Bserver (vap) The following scenario produces an erroneous status 14: a. first a workstation opens a file read-only; b. the same file is opened again in regular mode once or more times (either by another or by the same workstation); c. using the "regular-mode" handle(s) do some operations which involve the preimage file of the file (insert, update, delete, or transact) d. close the file on all handles so that the "read-only" handle does the LAST close; e. open the file again in regular mode and try to do any operation which uses the pre-image file. 9. Brequest This patch makes BRequest aware of a new error code #74, which results when an END_TRANS function is internally changed to an ABORT_TRANS due to a previous error within the transaction. Without this patch, Brequest will stop broadcasting the END_TRANS to all servers when this error is encountered. This can result in the transaction left open on another server. 10. Brequest This patch fixes BRequest so that it can reset another workstation by connection number without also resetting itself and terminating its own connection. 11. Brequest This patch fixes a BRequest SPX input queueing problem which can result in lost packets and even BRequest lock-up when overloaded. This problem is generally seen only if a very slow workstation is talking to a very fast (and lightly loaded) BServer. It may also appear when BRequest is running in a DesqView window with other processes (such as copying from a hard disk to a floppy), since that effectively slows the W.S. 12. BUTIL.EXE Increased stack size to 22K bytes. Btrieve utilities for COPY and BINDEX were crashing due to insufficient stack space to accommodate local variables. 13. Brequest This patch was made to satisfy a user request that BRequest should be able to alternately attach, query, and detach to an indefinite number of BServers. Currently, BRequest would have to be unloaded after the 8th server is attached. 13/a Brequest This patch is required in conjunction with patch #13 and ALSO fixes a longstanding problem where a Begin_Transaction immediately after mapping to a new server would fail to broadcast the transaction to that server. 14. Btrieve (nlm) An incompetibility with the rest of the Btrieve products: The Get Position operation following a Delete operation returns status 43 instead of status 8. 15. OS/2 Requester 15.a Returning status 22 on extended inserts 15.b Version returned was 5.0 16. OS/2 Requester Opening a file on a different server than previously opened files could have resulted in a status 12 despite correct filename and drive mappings. 17. OS/2 Requester Apparently random status 12 or 91 returned when opening a file. This occurs if two file servers in the LAN have identical internet addresses except for the last byte, and if the desired server is found after the other in the bindery scanned for BSERVER VAP's. 18. OS/2 Requester Protection violation generated by the COBOL interface due to the requester not restoring the caller's SI and DI registers on return. This could, but hasn't yet, be caused in other languages as well. 19. Btrieve (nlm) Without this patch various random error status can be returned when using variable length pages or using truncation. 20. Btrieve (dos) Btrieve might hang if another TSR program is using it. 21. Btrieve (nlm) The Btrieve function to compare INTEGER keys will sometimes not recognize a negative value, such as 8000h, as the lower value, treating it as unsigned instead. ( This patch was originally buggy and had to be corrected on 29Oct90. ) 22. Btrieve (nlm) If 1. User1 and User2 have different files open ( A and B ) and 2. User3 also opens file A and 3. User4 also opens file B while 4. User2 is simultaneously CLOSING file B a timing window may appear which causes a divide-by-0 GPI. This patch corrects a semaphore to fix this. ( This patch was modified on 29Oct90 to allow correction to #21, above. ) 23. Btrieve (only dos 5.10, not 5.10a!) Btrieve might hang when loading in certain environments (hardware and/or programs run before loading Btrieve) 24. Btrieve (nlm,dos) Get Key-only operations are erroneously not updating the position block. 25. Btrieve (vap) Logging to a different volume of the same server does not work properly. 26. Btrieve (nlm) If a Btrieve file has a ZSTRING or LSTRING key using alternate collating sequence then a key value of length 0 for that key can result in some undeterministic error due to an uninitialized variable. 27. Btrieve (nlm, vap ) & Brequest (dos, os/2 ) For data-only files, Btrieve was returning data to the key buffer after Get Direct, Update, Insert and Extended Insert. *** THE PATCH MUST BE MADE BOTH TO THE VAP (OR NLM) AND THE REQUESTER *** THE VAP (OR NLM) SENDS A FLAG TO THE REQUESTER- IF YOU DON'T PATCH THE REQUESTER THE FLAG WILL NOT BE UNDERSTOOD AND THE PROBLEM WILL STILL BE PRESENT. 28. Btrieve (dos) A file can become corrupted if a work station opens a file as another workstation closes the same file from an accelerated processing mode (timing-related bug, which is corrected by this patch). 29. Btrieve (nlm) This fixes a bug where a file opened by Btrieve on the server could not be opened for read-only by a non-Btrieve application, even though the file had the Shareable attribute set by the Netware FLAG utility. 30 Btrieve (vap, dos) Btrieve will return an erroneous status 26 when adds a supplemental index with 8 segments to a data only btrieve file of size 512 bytes. 31 Btrieve (dos) Btrieve will return an erroneous status 83's when it does Insert Extended operations within a transaction. 32 Btrieve (nlm) This fixes a bug in an undocumented Btrieve function call, used by Netware SQL. Only apply this patch after applying patch #27! 33 Btrieve (vap, nlm) This fixes the following bug: after a Get Direct returns a status 22 (user's data buffer too small), the user's key buffer was being overwritten with garbage. It also fixes a bug in which the nlm was not returning a key value after a Get Direct returns a status 22 when the user's data buffer WAS long enough to at least receive the fixed length portion (including the keys) of the record. *** THIS PATCH WILL ONLY WORK IF PATCH #27 HAS BEEN APPLIED TO THE *** VAP OR NLM AND BREQUEST.EXE !!! 34 Btrieve (vap) Fixes a bug which caused a GPI crash on the vap's server when the application used the Extended Insert function and passed a data buffer larger than the "Largest record size" parameter configured by Bsetup. 35 Btrieve (dos) Fixes a bug which causes btrieve to unnecessarily make a preimage file if the very first operation requested after Btrieve is loaded is a Create. 36 Btrieve (dos) Fixes a bug by which btrieve crashes (or perhaps shows other unpredictable symptoms) when updating a record retrieved with a get direct or step (no key) operation if there has been no insert nor get (using a key) since the file was open, and if the file's position block array contained values other than binary zeros prior to the file's open operation. (Fixes problem where update to dataonly file after StepFirst hangs the workstation) 37 Btrieve (nlm, dos, and vap) Fixes a bug which caused Btrieve to return an incorrect status 2 when deleting a record from a file with a supplemental index. This bug is most likely to occur only if few records have been inserted since the creation of the supplemental index. The bug only occurs on the VAP or DOS if the supplemental index was created with the NLM. 38 BTRTOOLS - (Windows Btrieve utilities) This patch fixes the description file utility dropping the first word of the comments from the description file. 39 Btrieve (OS/2) Fixes a bug which would cause a segmentation violation during re-initialization through BTRVINIT(). 40 Btrieve ( vap ) Fixes an error in patch #34 for the vap. This error caused a status 39 to be returned to XQLI when that program starts-up. 41 Btrieve ( OS/2 & Windows ) Fixes the same problem described in patch 35. 42 Btrieve ( OS/2 & Windows ) Fixes the same problem described in patch 36. 43 Btrieve ( OS/2 & Windows ) Fixes the same problem described in patch 37. This bug will only occur in Btrieve for Windows or OS/2 when using a file created by the NLM Btrieve. 44 Btrieve ( dos & OS/2 ) Fixes this bug: A file is opened in exclusive mode. The application then repeats the following sequence a several times, each time using a different record: it retrieves a record using a multiple record lock bias (300 or 400), then it updates or deletes that record (which should clear the lock). Eventually, a status 81 (Lock Error) is returned. The number of times it can repeat the sequence before the status 81 is determined the user's specification of the maximum number of multiple locks (/L:). For DOS Btrieve, this bug will also appear if the file is opened in other modes, provided that the file is on a non-network drive and SHARE.EXE is not loaded. 45 BTRTOOLS (Windows) Fixes bug which required File Information key count to match total key/segment count in description file. This was for the description file edit utility. 46 Btrieve (dos) Btrieve does not return status code 83 when a record is updated but not read inside a transaction. 47 Btrieve (NLM) When many workstations are constantly updating the same file, a timing window can appear which results in cache corruption. The effects can range from file corruption to abends due to divide/by/zero or processor exception interrupts. 48 Btrieve (NLM) When ending a transaction on multiple files of different page sizes, the cache can become corrupted, causing the next reader of a file in the cache to get errors #15 and/or #52. 49 BROUTER (NLM {Netware 3.1}) This patch forces only one connection per server and serializes client threads to avoid an as-yet-unexplained SPX hang. 50 BROUTER (NLM {Netware 3.1}) This patch fixes the SPX hang mentioned above and may be used instead of patch #1. (using both patches is equivalent to using just #1) This allows up to 3 BRouter-Btrieve conections to a given server and may result in improved performance in some cases. 51 BUTIL.EXE Clone is created incorrectly for a file which has at least one multi- segmented supplemental key and one or more additional supplemental keys. 52 BROUTER (VAP) This bug causes the server to GPI or ABEND if a Btrieve CREATE call is made to a REMOTE server. 53 BROUTER (VAP) If there are more than 100 file servers on the network(s), then BRouter will sometimes crash when building it's server tables. 54 BROUTER (VAP) This patch fixes a BRouter SPX input queueing problem which can result in lost packets and even BRouter lock-up when overloaded. 55 Btrieve (VAP, DOS, Windows, OS/2) If VAP Btrieve has a file open, and DOS or Windows Btrieve (running on a workstation) tries to open a file in the Normal, Verify, or Exclusive modes, DOS/Windows/OS2 Btrieve incorrectly returned a status 94. This patch makes it return the correct status, 85. Similarly, if Btrieve running on a workstation has a file open and VAP Btrieve tries to open it (any mode), VAP Btrieve was returning a 94. Now it'll return an 85. Also, if a workstation Btrieve tries to open a file in Accelerated mode in a directory in which the user does not have Netware Write permission, an incorrect status of 85 was being returned. Now it returns a 94. 56 Btrieve (VAP) This bug allowed a user to open and write to files in directories in which the user has no Write permission. 57 Btrieve (NLM) This bug caused a GET_NEXT to fail with a status 8 immediately after an extended insert, but only if the insert followed an open call. 58 Btrieve (VAP) This is not really a bug but it allows applications which "illegally" change the key number when executing an update operation to operate without getting a status 7. (Earlier versions did not catch the user when changed the key number, so this fix makes 5.10 backward compatible in this respect.) 59 Btrieve (NLM) Multiple segmented null keys are not working; they either inserted into the index (if duplicates are allowed) or the first occurance is inserted into the index and status 5 is returned for the rest of the time (if duplicates are not allowed). 60 Btrieve (NLM) For a KEY-ONLY file which is small enough to fit on a single page, the operations sequence OPEN-GET LAST(KEY)- GET PREVIOUS(KEY) [0-63-57] can cause the server to hang in a loop. 61 Btrieve (NLM) An Extended Insert called with a data buffer of all 0's (no data) would return a random, uninitialized error value instead of the correct #63. 62 Btrieve (!!!! Only for IBM PC LAN users !!!!) Changes executed on a file within a transaction are erroniously rolled back if another station accesses the file before an End Transaction (op19) executed on the first station. 63 Btrieve (NLM) Btrieve may return a status 9 (End of File) prematurely when Step Direct is used to retrieve records from a file with greater than 65,535 pages (i.e., at least 32 megabytes, depending on page size). 64 Btrieve ( DOS ) If the user attempts to install Btrieve with the /F:nn parameter to specify that Btrieve allow more than 20 open files, and for any reason the attempted installation fails (e.g., Btrieve already loaded), then this bug could cause unpredicatible symptoms, most likely hanging the system. 65 Btrieve ( OS/2 ) Cntl-Break causes program to hang because OS/2 does not either clear the Btrieve semaphore owned by the process, or does not let the process finish the Btrieve operation before terminating. The ExitList routine was waiting for the semaphore to clear. Cntl-C does not cause have this problem. 66 Btrieve (nlm) This fixes a bug in an undocumented Btrieve function call, used by XQL and NetWare SQL. The bug caused Netware SQL/XQL to return a status 25 when logging in. 67 Btrieve (vap) This fixes a bug in an undocumented Btrieve function call which is used by NetWare SQL in its "alter table" function. This bug was introduced by patch #6. 68 BROUTER (NLM, VAP) This fixes an interface problem between both BROUTERs and the Btrieve NLM when doing an update operation on a key number other than 0. In some cases this could result in over-writing the front of the record. 69 Btrieve ( DOS, Windows, OS/2 ) When the user attempts to use Btrieve's logging feature, and specifies a log file on a different volume of the same server on which the file-to-be-logged resides, logging does not happen. This patch fixes the problem for DOS and Windows Btrieve. However, this problem is not patchable for OS/2 Btrieve. 70 Brequest.exe Brequest would not completely fill its data buffer, returning #97 for a 4096-byte record, even with a /D=4096 parameter. 71 Btrieve ( DOS, Windows, OS/2, VAP, NLM ) When an application does a Step Next or Step Previous (or Extended Step Next/Previous) after a Delete, Btrieve should return a status 8, Invalid Positioning. Instead, this bug causes it to go into an endless loop. With the VAP & NLM, the workstation will appear to be hung, too. This patch fixes that bug. (The bug only appears if the record deleted has a physical position > 0xffff.) Also fixed is a related symptom of this bug: DOS, Windows and OS/2 Btrieve incorrectly return a status 0 if you do a Get Position after a Delete. 72 Btrieve (NLM) If station #1 is doing GETEQUALs with a key and client #2 is doing DELETES on the same file using a different key, the system can sometimes get confused about which key was last used by #1, returning a status 7. 73 Btrieve (DOS, Windows, OS/2) Fixes a bug which shows up in the following scenario: an application has two files open, and file #2 is opened in accelerated mode. It closes file #1. It does some updates/inserts to file #2. It closes file #1 again (an error which returns a status 3). Many of the recent changes to file #2 will be lost. 74 Btrieve (DOS, Windows, OS/2) Regarding the Btrieve logging feature: the Reset operation was not being logged, and the log files were being left opened after a Reset. 75 Btrieve (NLM) XQLP and SQL returned status 82 on a user-defined sort at the NLM due to a bug in an undocumented Btrieve function. 76 Btrieve (DOS) This corrects severe performance degradation on simple reads during inserts by another WS with a transaction on the file. This was caused by waiting in a loop for a lock instead of simply verifying a not-locked state and returning. 77 Btrieve (DOS) Btrieve 5.10 uses a new mechanism in order to keep more than 20 files open to DOS at a time, instead of rotating the 20 available handles. This can cause Btrieve to compete with the application for available DOS or NetWare handles where it did not previously do so. One solution is to set the NetWare shell configuration to allow more than the default 40 handles. A low-performance solution is to use this patch to disable the new mechanism and keep the 20 handle rotaton limit. This allows 5.10 to substitute for 5.00 without any environment changes, but at a cost. 78 Btrieve (DOS, Windows, OS/2, VAP) and BROLLFWD. If the computer on which DOS, Windows, or OS/2 Btrieve is running is turned off or rebooted during a transaction, Btrieve's implicit Abort Transaction, which it performs when the files involved are next opened, was not being logged properly. Also, with BSERVER.VAP, there is a small timing window during which, if the server is turned off during an update, delete, or insert, the VAP may improperly log an operation when the involved files are reopen. In each of these cases, the improper logging will confuse BROLLFWD. (Note: BROLLFWD is not being patched. You must use version 5.15 of BROLLFWD to fix this bug.) 79 Btrieve (DOS, Windows, and OS/2) If an End Transaction operation is interrupted (by a reboot, or power down), Btrieve may not be able to use the transaction file. DOS Btrieve displays "Unable to access btrieve file for transaction recovery" and will not load. Windows and OS/2 Btrieve return a status 1002. This patch is for DOS Btrieve only. Windows and OS/2 Btrieve will be fixed in the next release. 80 Btrieve (NLM) In certain cases when an UPDATE fails for Duplicate Key (Error 5) the update operation may not be undone properly. This can result in subsequent status 9s or 4s on a GET_EQUAL for a limited number of other keys which may have been corrupted by this failure. This bug corrects the preimaging call to fix this. 81 Btrieve (DOS) The user's Filter_Reject_Count on GET_EXTENDED operations was limited to 128 records, regardless of the length passed in, resulting in error #60 when records should have been returned. This removes that limit. ***** Last Update - 2/22/91 - MH *****