Consultor Eletrônico



Kbase 17186: SE 6028 Caused By ESQL Solaris Compiler Incompatibility UCB
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   21/08/2003
Status: Technically Reviewed

FACT(s) (Environment):

Sun Solaris 2.x

SYMPTOM(s):

SYSTEM ERROR: A/R block doesn't match caller's. Transaction inconsistency. (6028)

CAUSE:

ESQL large and small client are built with incompatible runtime libraries.

The immediate cause of the failure is that the incompatible UCB version of setjmp() will be invoked instead of the correct one. Specifically, the UCB version of the standard setjmp() function is storing 19 longwords of data into a SQL control structure with only 12 longwords of space (for the jmp_buf data). Some of the extra data stored overwrites the Progress SQL A/R block number. The A/R block number is then incorrect, and when Progress ESQL uses it on a Commit operation it will raise the fatal 6028 error.

FIX:

The information below was obtained informally through Sun's technical support. For more information or further clarification on Sun compilers, please contact Sun Technical support.

Sun has only one standard C compiler for Solaris 2.x. It is a layered product and does not ship with the OS-- it must be ordered separately. The default installation location is:

/opt/SUNWspro/bin/cc. ***This is Sun's ANSI compliant, SYSV flavor C compiler and it IS compatible with Progress ESQL.***

What Sun compiler should NOT be used?

Solaris 2.x is a SYSV flavor of UNIX - while Solaris 1.x/SunOS4.1.x is BSD. Most C applications can port easily from a BSD UNIX to a SYSV UNIX --but some can not; therefore, Sun provides a BSD compatible environment in Solaris 2.x for those applications that use something specific to BSD. This BSD compatible compiler is NOT the standard Sun compiler.

This BSD compatible compiler is found in /usr/ucb/cc which does ship with the OS. This file is simply a shell script which sets up some compiler flags and ultimately invokes /opt/SUNWspro/bin/cc. The flags that are set tell the compiler to look for header files first in /usr/ucbinclude and to look first for libraries in /usr/ucblib. Sun does not recommend using /usr/ucb/cc unless you MUST have BSD compatibility.

Users that are looking for C on their system, often find /usr/ucb/cc first because it comes with the OS install. The suggestion is to leave /usr/ucb out of your PATH - and add /opt/SUNWspro/bin.

However, if you use the UCB compiler, your runtime environment will NOT be compatible with Progress ESQL and will result in fatal error
6028.

The bottom line is that you must build ESQL applications with the same runtime libraries which Progress SQL was built for. On Solaris 2.x, these are the standard libraries usually found in /usr/lib, such as lic.so.