summaryrefslogtreecommitdiff
path: root/src/tests/xb_test_lock.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tests/xb_test_lock.cpp')
-rwxr-xr-xsrc/tests/xb_test_lock.cpp874
1 files changed, 0 insertions, 874 deletions
diff --git a/src/tests/xb_test_lock.cpp b/src/tests/xb_test_lock.cpp
deleted file mode 100755
index 39332ad..0000000
--- a/src/tests/xb_test_lock.cpp
+++ /dev/null
@@ -1,874 +0,0 @@
-/* xb_test_lock.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-// This program tests the locking functions of xbase
-// usage: xb_test_lock QUITE|NORMAL|VERBOSE
-
-
-#include "xbase.h"
-
-using namespace xb;
-
-#include "tstfuncs.cpp"
-
-/****************************************************************/
-int main( int argCnt, char **av )
-{
- xbInt16 iRc = 0;
- xbInt16 iRc2;
- xbInt16 po = 1; /* print option */
- /* 0 - QUIET */
- /* 1 - NORMAL */
- /* 2 - VERBOSE */
-
- xbInt16 iErrorStop = 0;
- xbString sLockFile = "locktest.txt";
- xbString sLockCmd;
- xbString sResult;
-
- xbXBase x;
- xbDbf * MyFile;
-
- if( argCnt > 1 ) {
- if( av[1][0] == 'Q' )
- po = 0;
- else if( av[1][0] == 'V' )
- po = 2;
- }
-
- xbSchema MyRecord[] =
- {
- { "LOCKTEST", XB_CHAR_FLD, 5, 0 },
- #ifdef XB_MEMO_SUPPORT
- { "MEMOTEST", XB_MEMO_FLD, 10, 0 },
- #endif
- { "",0,0,0 }
- };
-
-
- #ifdef XB_LOGGING_SUPPORT
- x.SetLogDirectory( PROJECT_LOG_DIR );
- x.EnableMsgLogging();
- if( po > 0 ){
- std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
- }
- xbString sMsg;
- sMsg.Sprintf( "Program [%s] initializing...", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
- x.SetDataDirectory( PROJECT_DATA_DIR );
- InitTime();
- #ifdef XB_DBF4_SUPPORT
- MyFile = new xbDbf4( &x ); /* version 4 dbf file */
- #else
- MyFile = new xbDbf3( &x ); /* version 3 dbf file */
- #endif
-
- iRc2 = MyFile->CreateTable( "LockTest.DBF", "LockTest", MyRecord, XB_OVERLAY, XB_MULTI_USER );
- iRc += TestMethod( po, "CreateTable()", iRc2, XB_NO_ERROR );
- iRc += TestMethod( po, "PutField()", MyFile->PutField( "LOCKTEST", "TEST" ), XB_NO_ERROR );
- iRc += TestMethod( po, "AppendRecord()", MyFile->AppendRecord(), XB_NO_ERROR );
- iRc += TestMethod( po, "Close()", MyFile->Close(), XB_NO_ERROR );
- MyFile->Close();
-
- //unlink( sLockFile );
- remove( sLockFile );
-
- #if defined (HAVE_FORK_F)
- pid_t pid;
- if(( pid = fork()) < 0 ){
- std::cout << "fork error\n";
- exit(1);
- }
-
- if( pid == 0 ){
- // child task
- xbDbf * MyFileChld;
- xbInt16 iRcChld = 0;
- xbBool bTblOpenChld = xbFalse;
- xbInt32 iChildLoop = 0;
- xbBool bDone = xbFalse;
- xbString sLastLockCmd;
-
- #ifdef XB_DBF4_SUPPORT
- MyFileChld = new xbDbf4( &x ); /* version 4 dbf file */
- #else
- MyFileChld = new xbDbf3( &x ); /* version 3 dbf file */
- #endif
-
- x.xbSleep( 250 );
-
- while( !bDone ){
- iRc2 = GetCmd( x, sLockFile, sLockCmd, 'C', po );
-
- if( sLockCmd == sLastLockCmd )
- iChildLoop++;
- else
- sLastLockCmd = sLockCmd;
-
- #ifdef XB_LOGGING_SUPPORT
- if( sLockCmd != "OK" && sLockCmd != "FAIL" ){
- sMsg.Sprintf( "Program [%s] Child task retrieved command=[%s] RC=[%d]", av[0], sLockCmd.Str(), iRc2 );
- x.WriteLogMessage( sMsg );
- }
- #endif
-
- if( iRc2 == 0 ){
-
- if( sLockCmd == "OK" || sLockCmd == "FAIL" )
- x.xbSleep( 250 );
-
- else if( sLockCmd == "EXIT" ){
- bDone = xbTrue;
-
- } else if( sLockCmd == "START" && bTblOpenChld ){
- // came back before the parent task could process the result
- x.xbSleep( 250 );
-
- } else {
-
- if( sLockCmd == "START" ){
- // begin the process
- iRcChld = MyFileChld->Open( "LockTest.DBF" );
- if( iRcChld != XB_NO_ERROR ){
- sResult = "FAIL";
- } else {
- sResult = "OK";
- bTblOpenChld = xbTrue;
- }
-
- } else if( sLockCmd == "TL" ){
- // table lock
- if(( iRcChld = MyFileChld->LockTable( XB_LOCK )) != XB_NO_ERROR )
- sResult = "FAIL";
- else
- sResult = "OK";
-
- } else if( sLockCmd == "TU" ){
- // table unlock
- if(( iRcChld = MyFileChld->LockTable( XB_UNLOCK )) != XB_NO_ERROR )
- sResult = "FAIL";
- else
- sResult = "OK";
-
- } else if( sLockCmd == "RL" ){
- // record lock
- if(( iRcChld = MyFileChld->LockRecord( XB_LOCK, 1 )) != XB_NO_ERROR )
- sResult = "FAIL";
- else
- sResult = "OK";
-
- } else if( sLockCmd == "RU" ){
- // record unlock
- if(( iRcChld = MyFileChld->LockRecord( XB_UNLOCK, 1 )) != XB_NO_ERROR )
- sResult = "FAIL";
- else
- sResult = "OK";
-
- } else if( sLockCmd == "ML" ){
- // memo lock
- #ifdef XB_MEMO_SUPPORT
- if(( iRcChld = MyFileChld->LockMemo( XB_LOCK )) != XB_NO_ERROR )
- sResult = "FAIL";
- else
- sResult = "OK";
- #else
- sLockCmd = "OK";
- #endif
-
- } else if( sLockCmd == "MU" ){
- // memo unlock
- #ifdef XB_MEMO_SUPPORT
- if(( iRcChld = MyFileChld->LockMemo( XB_UNLOCK )) != XB_NO_ERROR )
- sResult = "FAIL";
- else
- sResult = "OK";
- #else
- sLockCmd = "OK";
- #endif
- }
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Child task [%s] Result [%s] RC = [%d]", av[0], sLockCmd.Str(), sResult.Str(), iRcChld );
- x.WriteLogMessage( sMsg );
- #endif
- SetCmd( x, sLockFile, sResult, 'C', po );
- if( sResult == "FAIL" ){
- bDone = xbTrue;
- MyFileChld->Close();
- delete MyFileChld;
- }
- }
-
- } else {
- iRc = iRc2;
- bDone = xbTrue;
- }
- //std::cout << "clc [" << iChildLoop++ << "][" << bDone << "][" << sLockCmd.Str() << "]\n";
- x.xbSleep( 250 );
- if( iChildLoop > 15 )
- bDone = xbTrue;
- }
- MyFileChld->Close();
- delete MyFile;
- delete MyFileChld;
-
- if( po > 0 )
- std::cout << "Exiting child\n";
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Child task terminating", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
-
- } else {
-
- // parent logic
- xbInt16 iLoopCtr = 0;
-
- try{
-
- // start
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task issuing START command", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
- sLockCmd = "START";
- SetCmd( x, sLockFile, sLockCmd, 'P', po );
- sResult = "";
-
- GetCmd( x, sLockFile, sResult, 'P', po );
- while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 30 ){
- GetCmd( x, sLockFile, sResult, 'P', po );
- x.xbSleep( 250 );
- iLoopCtr++;
- }
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
- x.WriteLogMessage( sMsg );
- #endif
-
- if( sResult != "OK" ){
- iErrorStop = 10;
- iRc2 = -1;
- throw iRc2;
- }
-
- // table lock
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task issuing TL command", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
- sLockCmd = "TL";
- SetCmd( x, sLockFile, sLockCmd, 'P', po );
- sResult = "";
-
- GetCmd( x, sLockFile, sResult, 'P', po );
- while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 30 ){
- GetCmd( x, sLockFile, sResult, 'P', po );
- x.xbSleep( 250 );
- iLoopCtr++;
- }
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
- x.WriteLogMessage( sMsg );
- #endif
-
- if( sResult != "OK" ){
- iErrorStop = 20;
- iRc2 = -1;
- throw iRc2;
- }
-
- // attempt to lock table, should fail
- if(( iRc2 = MyFile->Open( "LockTest.DBF" )) != XB_NO_ERROR ){
- iErrorStop = 30;
- throw iRc2;
- }
-
- if(( iRc2 = MyFile->LockTable( XB_LOCK )) == XB_NO_ERROR ){
- iErrorStop = 40;
- throw iRc2;
- }
-
- if( po > 0 )
- std::cout << "[PASS] LockTable Test 1\n";
-
- // table unlock
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task issuing TU command", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
- sLockCmd = "TU";
- SetCmd( x, sLockFile, sLockCmd, 'P', po );
- sResult = "";
-
- GetCmd( x, sLockFile, sResult, 'P', po );
- while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 30 ){
- GetCmd( x, sLockFile, sResult, 'P', po );
- x.xbSleep( 250 );
- iLoopCtr++;
- }
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
- x.WriteLogMessage( sMsg );
- #endif
-
- if( sResult != "OK" ){
- iErrorStop = 50;
- iRc2 = -1;
- throw iRc2;
- }
-
- if(( iRc2 = MyFile->LockTable( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 60;
- throw iRc2;
- }
- if( po > 0 )
- std::cout << "[PASS] LockTable Test 2\n";
-
- if(( iRc2 = MyFile->LockTable( XB_UNLOCK )) != XB_NO_ERROR ){
- iErrorStop = 70;
- throw iRc2;
- }
-
- /* record lock */
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task issuing RL command", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
- sLockCmd = "RL";
- SetCmd( x, sLockFile, sLockCmd, 'P', po );
- sResult = "";
-
- GetCmd( x, sLockFile, sResult, 'P', po );
- while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 30 ){
- GetCmd( x, sLockFile, sResult, 'P', po );
- x.xbSleep( 250 );
- iLoopCtr++;
- }
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
- x.WriteLogMessage( sMsg );
- #endif
-
- if( sResult != "OK" ){
- iErrorStop = 80;
- iRc2 = -1;
- throw iRc2;
- }
-
- if(( iRc2 = MyFile->LockRecord( XB_LOCK, 1 )) == XB_NO_ERROR ){
- iErrorStop = 90;
- throw iRc2;
- }
- if( po > 0 )
- std::cout << "[PASS] LockRecord Test 1\n";
-
- /* record unlock */
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task issuing RU command", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
- sLockCmd = "RU";
- SetCmd( x, sLockFile, sLockCmd, 'P', po );
- sResult = "";
-
- GetCmd( x, sLockFile, sResult, 'P', po );
- while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 30 ){
- GetCmd( x, sLockFile, sResult, 'P', po );
- x.xbSleep( 250 );
- iLoopCtr++;
- }
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
- x.WriteLogMessage( sMsg );
- #endif
-
- if( sResult != "OK" ){
- iErrorStop = 100;
- iRc2 = -1;
- throw iRc2;
- }
-
- if(( iRc2 = MyFile->LockRecord( XB_LOCK, 1 )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc2;
- }
-
- std::cout << "[PASS] LockRecord Test 2\n";
- if(( iRc2 = MyFile->LockRecord( XB_UNLOCK, 1 )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc2;
- }
-
-
- /* memo lock */
- #ifdef XB_MEMO_SUPPORT
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task issuing ML command", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
- sLockCmd = "ML";
- SetCmd( x, sLockFile, sLockCmd, 'P', po );
- sResult = "";
-
- GetCmd( x, sLockFile, sResult, 'P', po );
- while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 30 ){
- GetCmd( x, sLockFile, sResult, 'P', po );
- x.xbSleep( 250 );
- iLoopCtr++;
- }
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
- x.WriteLogMessage( sMsg );
- #endif
-
- if( sResult != "OK" ){
- iErrorStop = 130;
- iRc2 = -1;
- throw iRc2;
- }
-
- if(( iRc2 = MyFile->LockMemo( XB_LOCK )) == XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc2;
- }
- if( po > 0 )
- std::cout << "[PASS] LockMemo Test 1\n";
-
- /* memo unlock */
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task issuing MU command", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
- sLockCmd = "MU";
- SetCmd( x, sLockFile, sLockCmd, 'P', po );
- sResult = "";
-
- GetCmd( x, sLockFile, sResult, 'P', po );
- while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 30 ){
- GetCmd( x, sLockFile, sResult, 'P', po );
- x.xbSleep( 250 );
- iLoopCtr++;
- }
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
- x.WriteLogMessage( sMsg );
- #endif
-
- if( sResult != "OK" ){
- iErrorStop = 150;
- iRc2 = -1;
- throw iRc2;
- }
-
- if(( iRc2 = MyFile->LockMemo( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 160;
- throw iRc2;
- }
-
- std::cout << "[PASS] LockMemo Test 2\n";
- if(( iRc2 = MyFile->LockMemo( XB_UNLOCK )) != XB_NO_ERROR ){
- iErrorStop = 170;
- throw iRc2;
- }
- #endif
-
- // exit
- sLockCmd = "EXIT";
- SetCmd( x, sLockFile, sLockCmd, 'P', po );
-
- } catch (xbInt16 iRc3 ){
- iRc = iRc3;
- if( po > 0 )
- std::cout << "Parent lock task exiting on failure [" << sLockCmd.Str() << "][" << iErrorStop << "]\n";
-
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task terminating with errors [%s][%d][%d][%d]...", av[0], sLockCmd.Str(), iErrorStop, iLoopCtr, iRc3 );
- x.WriteLogMessage( sMsg );
- #endif
-
- }
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task terminating", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
- if( po > 0 )
- std::cout << "Exiting parent\n";
-
- sLockCmd = "EXIT";
- SetCmd( x, sLockFile, sLockCmd, 'P', po );
- MyFile->Close();
- delete MyFile;
- }
- #elif defined (HAVE_CREATEPROCESSW_F)
-
- STARTUPINFO si;
- PROCESS_INFORMATION pi;
- ZeroMemory( &si, sizeof( si ));
- si.cb = sizeof( si );
- ZeroMemory( &pi, sizeof( pi ));
-
- xbString strCmdLine = "xb_test_lock2";
- if( argCnt > 1 ){
- strCmdLine += " ";
- strCmdLine += av[1];
- }
-
- char sCmdLineBuf[25];
- memset( sCmdLineBuf, 0x00, 25 );
- for( xbUInt32 i = 0; i < strCmdLine.Len(); i++ )
- sCmdLineBuf[i] = strCmdLine[i+1];
-
- if( !CreateProcess( NULL, sCmdLineBuf, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi )){
- sMsg.Sprintf( "Program [%s] error in CreateProcess call. Processing aborted" );
- #ifdef XB_LOGGING_SUPPORT
- x.WriteLogMessage( sMsg );
- #endif
- std::cout << sMsg.Str() << "\n";
- iRc -=1;
- } else {
-
- xbInt16 iLoopCtr = 0;
-
- try{
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task issuing START command", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
-
- sLockCmd = "START";
- SetCmd( x, sLockFile, sLockCmd, 'P', po );
- sResult = "";
-
- GetCmd( x, sLockFile, sResult, 'P', po );
- while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 10 ){
- GetCmd( x, sLockFile, sResult, 'P', po );
- x.xbSleep( 250 );
- iLoopCtr++;
- }
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
- x.WriteLogMessage( sMsg );
- #endif
-
- // table lock
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task issuing TL command", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
- sLockCmd = "TL";
- SetCmd( x, sLockFile, sLockCmd, 'P', po );
- sResult = "";
-
- GetCmd( x, sLockFile, sResult, 'P', po );
- while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 10 ){
- GetCmd( x, sLockFile, sResult, 'P', po );
- x.xbSleep( 250 );
- iLoopCtr++;
- }
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
- x.WriteLogMessage( sMsg );
- #endif
-
- if( sResult != "OK" ){
- iErrorStop = 200;
- iRc2 = -1;
- throw iRc2;
- }
-
- // attempt to lock table, should fail
- if(( iRc2 = MyFile->Open( "LockTest.DBF" )) != XB_NO_ERROR ){
- iErrorStop = 210;
- throw iRc2;
- }
-
- if(( iRc2 = MyFile->LockTable( XB_LOCK )) == XB_NO_ERROR ){
- iErrorStop = 220;
- throw iRc2;
- }
-
- if( po > 0 ){
- std::cout << "[PASS] LockTable Test 1\n";
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task LockTable Test 1 Success.", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
- }
-
- // table unlock
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task issuing TU command", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
- sLockCmd = "TU";
- SetCmd( x, sLockFile, sLockCmd, 'P', po );
- sResult = "";
-
- GetCmd( x, sLockFile, sResult, 'P', po );
- while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 10 ){
- GetCmd( x, sLockFile, sResult, 'P', po );
- x.xbSleep( 250 );
- iLoopCtr++;
- }
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
- x.WriteLogMessage( sMsg );
- #endif
-
- if( sResult != "OK" ){
- iErrorStop = 230;
- iRc2 = -1;
- throw iRc2;
- }
-
- if(( iRc2 = MyFile->LockTable( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 240;
- throw iRc2;
- }
- if( po > 0 ){
- std::cout << "[PASS] LockTable Test 2\n";
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task LockTable Test 1 Success.", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
- }
-
- if(( iRc2 = MyFile->LockTable( XB_UNLOCK )) != XB_NO_ERROR ){
- iErrorStop = 250;
- throw iRc2;
- }
-
- /* record lock */
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task issuing RL command", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
- sLockCmd = "RL";
- SetCmd( x, sLockFile, sLockCmd, 'P', po );
- sResult = "";
-
- GetCmd( x, sLockFile, sResult, 'P', po );
- while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 10 ){
- GetCmd( x, sLockFile, sResult, 'P', po );
- x.xbSleep( 250 );
- iLoopCtr++;
- }
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
- x.WriteLogMessage( sMsg );
- #endif
-
- if( sResult != "OK" ){
- iErrorStop = 260;
- iRc2 = -1;
- throw iRc2;
- }
-
- if(( iRc2 = MyFile->LockRecord( XB_LOCK, 1 )) == XB_NO_ERROR ){
- iErrorStop = 270;
- throw iRc2;
- }
- if( po > 0 )
- std::cout << "[PASS] LockRecord Test 1\n";
-
- /* record unlock */
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task issuing RU command", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
- sLockCmd = "RU";
- SetCmd( x, sLockFile, sLockCmd, 'P', po );
- sResult = "";
-
- GetCmd( x, sLockFile, sResult, 'P', po );
- while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 10 ){
- GetCmd( x, sLockFile, sResult, 'P', po );
- x.xbSleep( 250 );
- iLoopCtr++;
- }
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
- x.WriteLogMessage( sMsg );
- #endif
-
- if( sResult != "OK" ){
- iErrorStop = 280;
- iRc2 = -1;
- throw iRc2;
- }
-
- if(( iRc2 = MyFile->LockRecord( XB_LOCK, 1 )) != XB_NO_ERROR ){
- iErrorStop = 290;
- throw iRc2;
- }
-
- std::cout << "[PASS] LockRecord Test 2\n";
- if(( iRc2 = MyFile->LockRecord( XB_UNLOCK, 1 )) != XB_NO_ERROR ){
- iErrorStop = 300;
- throw iRc2;
- }
-
-
- /* memo lock */
- #ifdef XB_MEMO_SUPPORT
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task issuing ML command", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
- sLockCmd = "ML";
- SetCmd( x, sLockFile, sLockCmd, 'P', po );
- sResult = "";
-
- GetCmd( x, sLockFile, sResult, 'P', po );
- while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 10 ){
- GetCmd( x, sLockFile, sResult, 'P', po );
- x.xbSleep( 250 );
- iLoopCtr++;
- }
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
- x.WriteLogMessage( sMsg );
- #endif
-
- if( sResult != "OK" ){
- iErrorStop = 310;
- iRc2 = -1;
- throw iRc2;
- }
-
- if(( iRc2 = MyFile->LockMemo( XB_LOCK )) == XB_NO_ERROR ){
- iErrorStop = 320;
- throw iRc2;
- }
- if( po > 0 )
- std::cout << "[PASS] LockMemo Test 1\n";
-
- /* memo unlock */
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task issuing MU command", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
- sLockCmd = "MU";
- SetCmd( x, sLockFile, sLockCmd, 'P', po );
- sResult = "";
-
- GetCmd( x, sLockFile, sResult, 'P', po );
- while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 10 ){
- GetCmd( x, sLockFile, sResult, 'P', po );
- x.xbSleep( 250 );
- iLoopCtr++;
- }
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
- x.WriteLogMessage( sMsg );
- #endif
-
- if( sResult != "OK" ){
- iErrorStop = 330;
- iRc2 = -1;
- throw iRc2;
- }
-
- if(( iRc2 = MyFile->LockMemo( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 340;
- throw iRc2;
- }
-
- std::cout << "[PASS] LockMemo Test 2\n";
- if(( iRc2 = MyFile->LockMemo( XB_UNLOCK )) != XB_NO_ERROR ){
- iErrorStop = 350;
- throw iRc2;
- }
- #endif
-
- // exit
- sLockCmd = "EXIT";
- SetCmd( x, sLockFile, sLockCmd, 'P', po );
-
- } catch (xbInt16 iRc3 ){
- if( po > 0 )
- std::cout << "Parent lock task exiting on failure [" << sLockCmd.Str() << "][" << iErrorStop << "]\n";
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task terminating with errors [%s][%d][%d][%d]...", av[0], sLockCmd.Str(), iErrorStop, iLoopCtr, iRc3 );
- x.WriteLogMessage( sMsg );
- #endif
-
- sLockCmd = "EXIT";
- SetCmd( x, sLockFile, sLockCmd, 'P', po );
- MyFile->Close();
- delete MyFile;
- }
- }
-
- #else
- iRc--;
- sMsg.Sprintf( "Program [%s] not executed. Library does not support 'fork' or 'CreateProcess' function call", av[0] );
- #ifdef XB_LOGGING_SUPPORT
- x.WriteLogMessage( sMsg );
- #endif
- if( po > 0 )
- std::cout << sMsg.Str() << "\n";
- #endif
-
- if( po > 0 || iRc < 0 )
- fprintf( stdout, "[%s] Total Errors = %d\n", av[0], iRc * -1 );
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], iRc * -1 );
- x.WriteLogMessage( sMsg );
- #endif
-
- return iRc;
-}
-