SCCS: @(#)README.PATCH 1.6 98/03/05 TETware release 3.2 Introduction to TETware source code patch releases. Source code patch releases may be made in between TETware GA releases. This enables customers who have signed up for TETware support to gain access to the most up-to-date TETware source code without needing to wait for the next GA release. Each patch release fixes one or more problems that have been reported since the last GA release. Once two or more patches have been issued, a cumulative patch archive is available in addition to the latest (or current) patch archive. The cumulative patch contains all the source files that have changed since the GA release, whereas the current patch archive contains only those files that have changed since the last patch release. If you are installing a patch release into a TET_ROOT directory hierarchy in which you have previously built TETware release 3.2, you don't have to re-run tetconfig or set up the defines.mk file again after you install the patch release. Instead you can rebuild TETware by resuming the build procedure at the "make install" stage. (A description of this procedure can be found in the appropriate TETware Installation Guide.) There follows a description of each of the problems fixed in each of the patch releases available to date. =========================================================================== Source code patch release 3 - 9th March 1988 =========================================================================== This patch contains some enhancements to enable Distributed TETware to be used to run test cases on larger numbers of remote systems, and to run larger numbers of individual test cases in parallel. One of these enhancements affects the way that system IDs may be specified in the :remote: and :distributed: scenario directives. When many system IDs are specified, it is now possible to specify a range of system IDs instead of having to specify each system ID individually. For example: :distributed,0,1,10-20: is equivalent to: :distributed,0,1,10,11,12,13,14,15,16,17,18,19,20: Files changed: src/tet3/tcc/dirtab.c 1.3 src/tet3/tcc/dirtab.h 1.3 src/tet3/tcc/journal.c 1.10 src/tet3/tcc/scen1.c 1.7 src/tet3/tcc/tool.c 1.11 src/tet3/tcclib/mktmpdir.c 1.2 src/tet3/tcclib/sharlock.c 1.3 =========================================================================== Source code patch release 2 - 23rd December 1997 =========================================================================== Problem: In some threads implementations a thread ID can be re-used as soon as a thread has been joined. This can cause problems in the TCM's thread cleanup code which can find itself cleaning up the wrong thread. Fix: When the API creates a new thread to wait for a left-over thread, make sure that the thread ID of the newly-created thread is not the same as the one being waited for. Files changed: src/tet3/apithr/thr_create.c 1.14 ------------------------------------------------------------------------ Problem: The tet_api.h and tet_jrnl.h header files should be protected against multiple inclusion. Files changed: inc/tet3/tet_api.h 1.27 inc/tet3/tet_jrnl.h 1.6 =========================================================================== Source code patch release 1 - 5th December 1997 =========================================================================== Problem: When a test case is executed with TET_EXEC_IN_PLACE=false, tcc recursively copies the test case execution directory directly to tmp-dir/NNNNNx. The test case is executed from there. This means that the full path name of the test case is not available to the test case (e.g., via tet_pname in the C API). Fix: Preserve the test case execution directory structure below the temporary execution directory. For example: copy tsroot/ts to tmp-dir/NNNNNx/ts. That way the test case is executed with an argv[0] of tmp-dir/NNNNNx/ts/tc1 and so the test case is able to deduce its full path name. Files changed: src/tet3/tcc/proctc.c 1.9 src/tet3/tcc/tool.c 1.9 ------------------------------------------------------------------------ Problem: When TET_RUN is specified, tcc attempts to create a file with a garbage name on HP-UX 9. Fix: Function get_runtime_tsroot() in file config.c returns a pointer to automatic data - should be static. Files changed: src/tet3/tcc/config.c v1.9 ------------------------------------------------------------------------ Problem: The code in tcc_rmtmpdir() assumes that a previous call to sychdir() has occurred. This is not always the case - if no call has been made to sychdir(), sy_cwd is NULL and so the strcmp() call causes a memory fault. Files changed: src/tet3/tcc/copysave.c v1.7 ------------------------------------------------------------------------ Problem: Memory fault in rrp_tccstart() in tcc/rrproc.c on LINUX systems; occurs when invoking tcc in rerun or resume mode. Analysis: On LINUX, getopt() scribbles on the argv passed to it, and also modifies argv[-1]. While this might not matter if the argv is the parameter to main(), it DOES matter if the argv has been allocated locally and the code relies on it not being written to, as in this case. Fix: The workaround is to allocate an argv which is big enough to hold (argc + 2) elements, then pass &argv[1] to getopt(). Files changed: src/tet3/tcc/rrproc.c v1.7 ------------------------------------------------------------------------ Problem: When a ^scenario-name appears within the scope of a :distributed: directive, test cases in the referenced scenario can't sync with each other. For example: all :distributed,0,1:^test test /ts/tc1 When a referenced scenario name is not used synchronisation works OK. Analysis: The "distributed" attribute is not propagated correctly to test cases in a referenced scenario when a ^scenario-name appears within the scope of a :distributed: directive. This attribute is currently held in each test case scenario element; it should instead be part of a test case's execution context. Fix: Remove SCF_DIST from sc_flags in struct scentab. Add pr_distflag in the context part of struct proctab and use that instead. Files changed: src/tet3/tcc/jnlproc.c 1.9 src/tet3/tcc/procdir.c 1.5 src/tet3/tcc/proctab.h 1.4 src/tet3/tcc/proctc.c 1.10 src/tet3/tcc/scen2.c 1.7 src/tet3/tcc/scentab.c 1.6 src/tet3/tcc/scentab.h 1.6 ------------------------------------------------------------------------ Problem: When remote (non-distributed) test cases are processed on more than one system, the test cases on the second and subsequent systems don't print TCM and IC Start and End messages to the journal and they get an ER_DONE error when they call tet_result(). Analysis: When remote (non-distributed) test cases are processed in Distributed TETware, tcc sends a system ID list to each tccd which contains all the system IDs specified in the :remote: directive. This confuses a TCM that supports distributed testing, since the TCM uses the relative position of its system ID in the list to determine whether it should be a MTCM or a STCM. (This will also cause tet_remgetlist() to return a misleading system ID list as well.) The system ID list should only contain the single system ID when a non-distributed test case is processed. Fix: In toolexec(), use pr_distflag instead of PRF_TC_CHILD to work out whether to send the current system list or the parent proctab's system list to each tccd. Files changed: src/tet3/tcc/tool.c 1.10 ------------------------------------------------------------------------ Problem: When the exec fails in tet_spawn() on UNIX systems, the error condition is not returned to the caller like it is on Win32 systems. Analysis: On UNIX systems the exec is done in a child process, so the success/failure information is not available in the parent. Fix: Set up a close-on-exec pipe before the fork(). After the fork() the parent reads the pipe. If the exec fails, the child uses the pipe to send an error indication to the parent. Files changed: src/tet3/apilib/shared.mk 1.8 src/tet3/apilib/tet_spawn.c 1.18 ------------------------------------------------------------------------ Problem: The -I option is missing from tcc's usage message. Fixed. Files changed: src/tet3/tcc/tcc.c 1.12 ------------------------------------------------------------------------ Problem: In Distributed TETware, when a test purpose doesn't register a result with XRESD, result is UNRESOLVED (should be NORESULT). Fixed. Files changed: src/tet3/xresd/xresproc.c 1.17