Chapter 3
Open Problem Summary

This chapter describes open problems for this release of DYNIX/ptx. The problem reports are separated into the following categories:

The numbers in parentheses identify the problems in the Sequent problem-tracking system. Unless otherwise noted, each problem will be fixed in a later release of the operating system.


Utilities Problem Reports

Background savecore Causes an Invalid Warning Message (247685)

If background savecore is used, the following message may appear when the system is booted:

Crashdump warning:existing dump
	A new dump will not be taken when needed:(use savecore to clear it)

Workaround: The message is invalid and can be ignored.

dump Is Restricted to Blocks No Larger Than 32 KB When Backing Up 1 GB or Larger Filesystems (17880)

When backing up filesystems that are 1 GB or larger, the dump(1M) command will not work with a blocking factor of more than 32 KB.

Workaround: Use a blocking factor of 32 KB.

fmli Can Fail if Run When the Filesystem Is Out of Space (17625)

If you run fmli when the filesystem is out of space, the program may create a file called.ott, whose length is zero. When you run fmli again, it may detect that this file exists, not create a new file, and then fail with a message such as the following:

Could not access object Menu.dbadmin

The problem occurs because the .ott file was not created correctly.

Workaround: Delete the .ott file.

getty Pops Streams Modules and Breaks rtelnet (236068)

Because of a security fix in V4.4.2, getty now pops off streams modules, breaking the Annex® rtelnet code that carefully sets up a pseudoterminal and calls getty.

Workaround: Until this behavior is corrected, change the Annex code (and any other code that calls getty on a pseudoterminal) to use uugetty instead.

ksh Does Not Support the env Variable Correctly (254035)

In the DYNIX/ptx V4.6 implementation of the Korn shell, the ENV environment variable applies only to interactive shells. For compliance with the UNIX98 specification, the file referred to by the ENV variable should be executed at the beginning of each shell invocation.

Workaround: None.

ksh wait Command Returns an Incorrect Value (248924)

The ksh internal wait command does not always return the correct value. The wait command should return 0 only if it is called with no parameters and all process IDs known by the invoking shell have been terminated. An intermittent case can occur where wait returns 0 when a PID is passed as the argument but the process has exited. In these circumstances, wait should return a value of 127.

Workaround: Do not rely on wait to return a value of 127, and also check for 0.

lp: Changing Print Job Priority Does Not Change Position in Job Queue (17734)

When you change the priority of a print job, its position in the print queue should change to reflect the new priority. The priority shows that it has changed, but the position of the print job does not change.

Workaround: Move the job to the head of the print queue by using the lp -H option. For example:

lp -i testlp1-45812 -H immediate

lp Standard Interface Does Not Emit Form Feed at the End (16799)

If a printer is configured with the standard interface (from /usr/spool/lp/model) and the user specifies the nofilebreak option to lp, the option is interpreted incorrectly. The nofilebreak option should prevent a form feed from being inserted between files; however, lp inserts the form feed.

Workaround: Edit the shell script for the standard interface (/usr/spool/lp/model/standard). Locate the following lines near the end of the script.

if [ -n "${FF}" -a "yes" = "${nofilebreak}" ]
then     echo "${CR}${FF}c"
fi
Change the value yes to no.

mailx Will Not Accept Login Names with 8th-Bit Set Characters (46790)

The mailx command does not accept login names that contain characters with the eighth bit set. For compatibility reasons across systems on a network, login names should be restricted to characters that do not set the eighth bit. For example, use only U.S. ASCII characters.

Workaround: None.

mkvtoc Does Not Validate the Disk Type and Capacity (249468)

When mkvtoc is used to install a VTOC on a disk, it does not verify that the disk type specified on the command line matches the physical disk type. Also, it does not verify that the disk capacity specified in the VTOC does not exceed the physical space available on the disk.

Workaround: Use the ptx/ADMIN "Create a Custom VTOC File" option to modify a VTOC and the "Create a VTOC" option to install a VTOC on a disk. ptx/ADMIN performs the necessary validations. If you run mkvtoc manually, be sure to specify the correct disk type and ensure that the disk capacity specified in the VTOC does not exceed the capacity of the disk.

nawk Variable Names Cannot Include Chars with the 8th Bit Set (46847)

Characters with the eighth bit set (for example ISO 8859-1 characters 0x80 - 0xff), cannot be used in nawk variable names. If 8-bit characters are used, nawk flags the variable with an illegal statement error message.

Workaround: None. Use only U.S. ASCII characters in variable names.

nroff Does Not Check for Some Errors (42781)

The nroff command does not print an error message or exit with an error status when it encounters a macro that is not defined. This can make it difficult to find errors in nroff source files.

Workaround: None.

pkgmk May Not Utilize Search Path from Prototype File (205387)

If a package's prototype file specifies a search path, pkgmk(1) must be invoked with the -b basedir option. If this option is omitted, pkgmk will make the intended package only if the object files reside in the current directory.

Workaround: Specify the -b basedir option when executing pkgmk.

sh Will Not Allow Variable Names with 8-Bit Characters (46843)

The Bourne shell (/bin/sh) does not allow variable names to contain characters with the most significant bit set (for example, ISO 8859-1 characters between 0x80 - 0xff).

Workaround: None. Do not use 8-bit characters in variable names.

System Cannot Boot If /var Is a Filesystem (217289)

/var cannot be a filesystem because it is needed during the early stages of the boot process as well as during system shutdown.

Workaround: None.

tic terminfo Compiler Has Problems with 8-Bit Characters (46794)

The tic terminfo compiler will fail to compile a tic source file if the first character on the first line of a terminfo entry has the most significant bit set. This problem affects only the first character in the alias1 name; 8-bit characters can be used in the names for alias2, alias3, and so on. Refer to terminfo(4) for more information.

Workaround: Use only U.S. ASCII characters for the first character in alias1. You can use any 8-bit characters in alias2, alias3, and so on.


ptx/ADMIN Problem Reports

ptx/ADMIN Does Not Allow Removal of Multiple Swap Devices (40860)

The menu system does not allow the removal of multiple swap devices.

Workaround: Remove the swap devices one at a time.

ptx/ADMIN Does Not Start (253883)

If ptx/ADMIN does not start when you issue the menu command, the system may have run out of message queues. To determine whether this is the case, run the following command:

$ /etc/kmstune base.msg

In the output, if the nfail statistic is greater than zero and the maxinuse statistic is equal to the nred statistic, the system is out of message queues.

Workaround: To allow the system to configure additional message queues, take these steps:

  1. Locate the following line in the script /etc/ktune.d/base.msg and increase number.

    red=number
  2. Excute the base.msg script.

ptx/ADMIN Does Not Support the -v Bootflag (45002)

The menu system does not support the -v bootflag.

Workaround: To set the -v flag, edit the /etc/rc2.d/bootflags file by hand.

ptx/ADMIN Dumps Core on Terminals with 8th Bit Set (46562)

ptx/ADMIN dumps core when executed on terminals using 8-bit control sequences. For example, on a vt200 with 8-bit control, CS1 is \\233 instead of \\E[.

Workaround: Set up the terminal for use with 7-bit control sequences and use a terminfo file with 7-bit control sequences.


Kernel Problem Reports

Applications May Require Additional Message Queues (253882)

The script /etc/ktune.d/base.msg specifies the maximum number of message queues that can be configured on the system. To run certain applications such as DB2, you will need to increase the default maximum value.

Workaround: To increase the value, take these steps:

  1. Locate the following line in the script /etc/ktune.d/base.msg and increase number.

    red=number
  2. Excute the base.msg script.

Cannot Boot with Root or Primary Swap on a Raw Disk (230322)

The operating system cannot boot if either the root filesystem or the primary swap partition is on a raw disk.

Workaround: Ensure that there is a VTOC on the disks containing the root filesystem and the primary swap partition.

Cannot Take System Off Line If It Is Running a CPU-Bound Process (45086)

If a system is running a CPU-bound process, the kernel may not allow the system to be taken off line. This affects the tmp_ctl system call and the offline command.

Workaround: Send a SIGSTOP to the process running on the system, take the system off line, and then send a SIGCONT to the process that you stopped.

Changes to the Primary Swap Partition Are Not Recognized (249540)

If you modify the size of the primary swap partition, the operating system does not recognize the change. This occurs because the label for the primary swap partition includes its size. When you modify the VTOC to adjust the size of the primary swap partition, the label is not updated.

Workaround: After modifying the VTOC, reboot the system with the -L flag to recreate the swap label with the new size.

ftruncate Checks Current File Permissions (31237)

Once a file has been successfully opened for writing, the kernel does not allow the ftruncate() system call to succeed, regardless of the current file permissions (like the write() system call). The ftruncate call fails and issues the message permission denied.

Workaround: None.

init Scenario Causes Confusing Console Behavior (232137)

When the system is attempting to transition from single-user to multiuser mode, a specific sequence of events can cause multiple shells to access the system console simultaneously, resulting in confusing behavior.

An example of this behavior is that if you were to cd to a new directory and then type ls multiple times, you might see different output from the different invocations of ls. This occurs because the two shells have different working directories, and therefore, the output from ls will be different, depending on which shell gets the console input that tells it to run ls.

The sequence of events causing this condition is as follows:

  1. While the system is in single-user mode, the user starts a new job control shell (either ksh or csh.)

  2. While still in this shell, the user attempts to go to multiuser mode with the init 2 command.

  3. The system fails to go to multiuser mode because of a failure in one of the /etc/rc2.d startup scripts and returns to single-user mode.

At this point, the job control shell that was started manually before the init 2 command is still there. In addition, init has spawned a new single-user shell. Both of these shells have read/write access to the system console, causing the confusing behavior.

Workaround: To get out of this state, use kill -9 pid to kill the older shell. To determine which shell to kill, type ps with no arguments. This will display only the new shell--do not kill this shell. Note the PID of this shell and then type ps -ef to display all of the processes in the system. In the output, find the ksh or csh shell having a different PID and then use kill -9 to kill it.

Invalid Bootstring Causes the Stand-Alone Kernel to Constantly Reboot (249850)

If the bootstring is invalid (for example, it does not point to a valid filesystem or there is no kernel), the stand-alone kernel (SAK) can go into a boot-fail-boot loop.

Workaround: Stop the boot and correct the bootstring. Then reboot the system.

printf() Does Not Handle Recursions Automatically (223453)

If a kernel printf() is interrupted while it is formatting into the kernel log buffer and another printf() is attempted, the buffer structure will be compromised.

Workaround: None.

pwconv Can Change Users' Login Regions (251281)

A user can be assigned to a specific application region (the user's login region) and will be placed in that region at login time. If pwconv is run after the pwunconv utility, the login regions for all users will be set to system.

Workaround: The user's login region is stored in the /etc/shadow file. Save this file before running pwunconv/pwconv. When these operations are complete, add the login regions specified in the saved /etc/shadow file to the new version of the file.

Raw Devices Cannot Be Used for Filesystems (236566)

A filesystem cannot be created on a raw disk device.

Workaround: Install a VTOC on the raw disk or place it under ptx/SVM control and then create the filesystem.

System Performance Is Slow When a Large Region Is Created (251248)

If a region is created with a large amount of memory, it is possible to exhaust the entire free memory in the system. The processes in the system region will wait for memory and may not make any progress. Booting the system may also be slow.

Workaround: When assigning memory to a region, be sure that a reasonable amount of memory is still available to the system.

VTOC Cannot Be Created on a Shared Disk (231905)

In previous releases, a new VTOC could be written to a device that already had a VTOC in place as long as none of the busy partitions were affected. In V4.5, this operation will fail for disks that are shared by ptx/CLUSTERS. An error message such as the following will be displayed:

Unable to open any disk which matches this name

Workaround: Run the devdestroy command to remove the VTOC driver from the disk. You must run this command from each node in the cluster. Next, from a single node, use mkvtoc to install the new VTOC on the disk. Then run devbuild on each node in the cluster to make the new partitions available.


I/O Device Problem Reports

8mm Rewind Can Fail with a Time-Out Error (207304)

When doing an mt offline or mt rewind command on an 8mm tape drive (tx), the following time-out error may appear on the console. Whether the error occurs depends on how far the drive has to rewind the cartridge.

04: WARNING: scsitape:5::tx0: SSI Hard Error on SCSI Start/Stop or 
Load/Unload Unit.
04: scsitape:6::tx0: SCSI target timed out (HBA Error=0x5 SCSI Error=0x0)

The mt command might also exit with an error status. If the command is being executed from a shell script, the error status may cause the script to fail.

Workaround: To increase the time-out period, increase the value of sct_space_timeout in scsitape_space.c and recompile the kernel.

Console Baud-Rate Change Garbles Output at Boot Time (41093)

If the console baud rate is changed through the firmware from 9600, the output from the DYNIX/ptx multiuser or single-user bootup shell scripts will be garbled.

Workaround: Leave the console baud rate at 9600 at boot time.

Console Terminal Modes Can Be Inherited from Previous Login (43908)

The /etc/gettydefs file sets terminals to SANE, giving them a default set of stty modes on a login. This does not appear to work on the console, such that any stty settings from the previous user remain in effect for the next login.

Workaround: Log in on the console as any user (root preferred). If the user can reset the terminal modes using stty(1), then do so. If the user cannot, then do not log out. Log in from another terminal and reset the modes on the console from that terminal, by executing stty sane < /dev/console.

devctl -c May Not Work as Expected in Cascaded Fabric Systems (249877)

devctl may not find devices as expected in a cascaded switched fabric when the cascaded switched fabric changes its Principal switch or it is fragmented because of E-link problems.

Case 1. Cascaded switched fabric changes its Principal switch. Using devctl -c fabricX to find new target devices on the cascaded switched fabric works, but devctl -c ffX or devctl -c quadX may not find all of the devices. The operating system logs the following message(s) and does not find any new target devices or link FC Host Adapters to the existing fabric.

warning:coalesce +fabric1 with fabric3: objects have unique IDs!
:device=+fabric1:device=fabric3:ees_region=system:Fri Aug 27 15:01:29 1999

Workaround. Deconfigure everything under all FC Host Adapters that are connected to the cascaded switched fabric. (The cascaded switched fabric can be identified from the above coalesce message. In the example, it is fabric3.) Then probe all of the FC Host Adapters. Note that you will get a different fabric name.

Case #2. Cascaded switched fabric is fragmented. Essentially the single fabric is broken into multiple fabrics.

warning:coalesce +fabric1 with fabric3: objects have unique IDs!
:device=+fabric1:device=fabric3:ees_region=system:Fri Aug 27 15:01:29 1999

Workaround: Make sure that the cascaded switched fabric is not fragmented by inspecting and correcting E-links and then rerun the devctl command.

Fabric Configuration Might Fail Under Certain Circumstances (249444)

If devices fail because of a link failure and the fabric is then deconfigured, the devices will not be reconfigured when the fabric is probed after the link has been restored.

Workaround: (1) After a link failure, remove the fiber optic cable that connects the FC Host Adapter to the switch/loop, and then put it back firmly. The devices will start working. Deconfiguring and reconfiguring the fabric is not required. (2) If the first workaround was not successful or you do not want to use that method, deconfigure the devices under the fabric, the fabric, and the FC Host Adapter. Insert the fiber optic cable firmly on both ends and then probe on the quad. All devices under the FC Host Adapter should then be configured. Do not probe the FC Host Adapter after deconfiguring the devices under the fabric and the fabric itself. If you deconfigure the fabric, you must deconfigure the FC Host Adapter and then probe on the quad. If neither of these workarounds is successful, there is another problem on your system.

I/O Time-Outs Can Cause Some Applications to Fail (218373)

Some I/O requests that time out (because of a device or cable failure) will take three minutes or more to fail the write request. In some extreme cases, applications such as databases that use timers to validate write operations will time out and fail before the operating-system timer expires. This problem has been seen only on Oracle® versions earlier than 7.3.2.

Workaround: None.

Panic Output May Stall Temporarily (226344)

When you force a system panic, there may be a delay before the output from the panic begins to display on the console. The delay is temporary and no output messages will be lost.

Workaround: None.


Library Routine Problem Reports

FORTRAN Problems with Microsecond Clock (32492)

The FORTRAN library contains routines GETUSCLK and USCLK_INIT that may conflict with user-defined names. If routines SECNDS or GETUSCLK are used, the microsecond clock is initialized by the FORTRAN runtime library and should not be initialized by the user program.

Workaround: Use these names only for function calls. A FORTRAN user should not initialize the microsecond clock with usclk_init(), because the FORTRAN runtime library will have already initialized it.

libcurses Does Not Check for EINTR (41495)

The read routines used in libcurses do not check for EINTR when EOF is read. Applications that use libcurses may see an EOF returned when a program has been continued after a suspend.

Workaround: The workaround used is dependent on the application. If input is in raw mode, when the user types a Ctrl-D, a Ctrl-D character will be seen rather than an EOF.

libcurses Functions May Not Support 32-Bit Wide Characters (32240)

The wide-character interface functions in libcurses (such as waddch()) currently handle only 16-bit wide characters. These functions assume the wide character is in the lower 16 bits of the argument.

Workaround: If a code set uses 32-bit wide characters, the libc function wctomb() can be used to translate the wide character to a multibyte character. Then the standard libcurses function (for example, addch()) can be called.

physpath(8) Has an Incorrect Example (254046)

In the physpath(8) man page, the example shown for the sn token is incorrect.

Workaround: The example should be as follows:

This physical path descriptor describes the first partition of a disk whose vendor ID is "IBM OEM," product ID is "DCHS09X," and serial number is "680ADE0B:"

sn(IBM OEM,DCHS09X,680ADE0B)disk(1)

wctype, wconv, and wchrtbl Expect 16-Bit Wide Characters (32401)

The wchrtbl(1M) command generates an LC_CTYPE definition file in 16-bit format, assuming that the input consisted of 16-bit wide characters. Correspondingly, the wctype() and wconv() functions expect the wide characters passed in as arguments to be in 16-bit wide character format. Currently, code sets of width greater than 2 cannot be fully supported.

Workaround: None.


C Compiler and Programming Tools Problem Reports

Debuggers Print Incorrect Values for Unprototyped float (39465)

Debuggers print incorrect values for function arguments that have been declared as float, but which the compiler passes as double because they have not been prototyped.

Workaround: Step the program until the argument is used within the function. At that point the value will be correct because the compiler will have converted it back to float. Or use prototyping for functions with float arguments.

Long Double Implementation Differs from SVR4 and ABI (209684)

In DYNIX/ptx V4.x, the C compiler stores long double variables in the same manner as double variables; each variable requires 8 memory bytes. SVR4.0 also stores the variables in the same manner as 8-byte double variables, but each variable requires 12 memory bytes. ABI and SVR4.2 store the variables as true 10-byte, extended-precision, floating-point values; each variable requires 12 memory bytes.

Programs using long double variables are not compatible with SVR4 or other ABI systems, including DYNIX/ptx V4.x. Recompilation will be required when moving programs with long double variables to or from DYNIX/ptx V4.x.

Workaround: None.

Position-Dependent asm Statements May Not Work (39449)

An asm statement that occurs both outside of a function and after the first function in a C program may not work as expected. In the following example, var may be placed in .text space instead of .data space:

asm("     .data");
asm("var: .long 1");

Workaround: Put all of the asm statements in any source file (except those residing within functions) at the beginning of the file and before the first function in the file.


debug Problem Reports

debug Conjunction Event Triggering Can Be Anomalous (200427)

The triggering of events that are comprised of multiprocess conjunctions may be anomalous. Two situations can cause this. The first occurs when one or more of the stop condition expressions involves a process executing within a function as illustrated by the following command.

stop p1@send && p2@receive

The anomaly can occur because the debugger evaluates p1@send as true from the time p1 enters send through the time p1 executes the instruction immediately after the call to send. So if p1@send is true and p2 enters receive just when p1 returns from send, the conjunction becomes true and the stop event is triggered. The anomaly is that p1 is no longer in send. Its program counter no longer lies within the range of send.

The second anomaly is similar to the first but involves program data items in multiple processes. Consider the following debugger command:

stop p1@ideal==1 && p2@reality==0

This command causes watchpoints to be set on p1@ideal and p2@reality. When p1 assigns 1 to p1@ideal, the debugger evaluates p1@ideal==1 as true until p1 assigns it some other value. So if p1@ideal is true and p2 assigns 0 to p2@reality, the conjunction becomes true and the stop event is triggered. The anomaly can occur because p1 is still executing while the conjunction is being evaluated. p1 may change p1@ideal after the evaluation, but before the triggering. When the triggering occurs, p1@ideal==1 is no longer true. This is essentially a race condition between expression evaluation and triggering.

Workaround: Be aware that these anomalies can occur in conjunctive event expressions.

debug May Appear to Hang When Calling a Function in a Process That Is Sleeping in a System Call (221986)

If a debugged process is sleeping in a system call such as wait() and you halt the process and then attempt to call a function in the process from the debugger, the process will continue to sleep in the system call instead of executing the called function.

Workaround: Avoid calling functions from the debugger when the process is not stopped in user-level code.

debug> !echo 'Quoted String'
Q


edb Problem Reports

edb Cannot Break at a Member Function of a Nested Class (240610) [3154]

edb cannot set a breakpoint at a member function of a nested class unless the member functions of that nested class are in the first object file linked into the executable.

Workaround: Change the order of the object files specified to the linker.

show X Shows Nested Class Instead of Outer Class (241807) [3272]

When there is both a class at the file scope and a nested class with the same name, edb gives information about the nested class for show X instead of using information about the class at the file scope.

Workaround: None.

Global Data Symbols Are Not Visible From Shared Object Used with dlopen() (244256) [3505]

edb cannot access global data from a shared object that was used with dlopen().

Workaround: None.

edb Does Not Recognize ABI long doubles (244904) [3581]

The ptx/C++ compiler supports two forms of long double. The default is eight bytes, the same as double, and matches the long double data type supported by the ptx/C compiler and by libc functions. An alternate form is 12 bytes, as required by the System V ABI for Intel processors. This form is specified by the c++ option -abilngdbl. edb cannot distinguish between the two forms and supports only the eight-byte form. Printing a long double value will show only eight bytes, and using the exec command to assign a new value will store only 8 bytes.

Workaround: None. We do not expect edb to ever support 12-byte long doubles.

edb Reports Argument List Incorrectly for struct Return Value (247479) [3913]

edb handles the argument list for a function with a struct return value incorrectly when the function has been compiled with the ptx/C++ compiler.

Workaround: None.

step over for Specific Process Does Not Always Work (248809) [4155]

edb fails intermittently when step over is specified for a particular process.

Workaround: Change the current job and then use step over for that new default job.