RP/TUX 6.5, TUX 6.51 - tpnotify (with flag=TPACK) call during tpcall execution causes hang (Doc ID 770008.1)

Last updated on NOVEMBER 04, 2016

Applies to:

Oracle Tuxedo / Tuxedo / 6.5, 6.51
Information in this document applies to any platform

Goal

Problem found in Tuxedo v6.5 RP323 on HPUX11-32bit platform. If user calls the tpnotify(with flag=TPACK) during a
tpcall execution (ie, before tpcall returns), it will cause the tpcall execution 
1) hang forever if NOTIFY is set to DIPIN in ubb or 
2) returned TPESYSTEM if NOTIFY is set to SIGNAL in ubb.

The testcase is available in /nfs/home3/qchan/lchp12/303730/ackserver(ackclient)
Steps to replicate:
1) Open a window for the server side, 
- goto /nfs/home3/qchan/lchp12/303730/ackserver, modify and run env to setup the proper environment;
- modify and tmloadcf -y ubbsimple (you can set NOTIFY to DIPIN or SIGNAL);
- comment out the "flag = TPACK;" line in the notifycl.c file to experience the success run of  testcase
this time;
- run mknotify.sh and mkserv.sh to compile the *.c
- tmboot -y
- run "tail -f stdout &"  (this step is important for use to get the clientid information during the
test)
2) Open another window for the client side,
- goto /nfs/home3/qchan/lchp12/303730/ackclient, modify and run env to setup the proper environment;
- run the mkunsol.sh to compile the client *.c;
- run "./wunsolcl &" to start the test sequence
3) In the client window, you will see "calling TOUPPER...(time to run notifycl)..." and,
In the server window, you will see a printout of this particular clientid[0...3] information (eg,
clientid[0]=1013117490, clientid[1]=0, clientid[2]=190, clientid[3]=0) which are used as input parameters for the
following command (where the notifycl command format is: ./notifycl anyString clientid[0] clientid[1] clientid[2]
clientid[3])
4) So,  run "./notifycl HelloWorld 1013117490 0 190 0"  in the server window;
==> you will see in the client window: "disp function is called: data=HelloWorld"
5) Wait for about a minute, you will see "return from TOUPPER...(time to run notifycl)..." in the client
window;
6) Then run "./notifycl HelloWorld 1013117490 0 190 0"  in the server window again;
==> In about another minute, you will see "disp function is called: data=HelloWorld" again in the client
window and,
7) the steps (3) to (6) can be repeated over and over again;
The above is what expected behavior of the testcase.

Now, if you put the "flag = TPACK;" line back to the notifycl.c file and run mknotify.sh to re-build the
notifycl and re-run the above steps again:
==> if you have NOTIFY is set to DIPIN in ubb, it will be hang/stuck at step (5) forever and you will never see the
"return from TOUPPER...(time to run notifycl)..." in the client window;
==> if you have NOTIFY is set to SIGNAL in ubb, it will get Tperror = 12 (ie, TPRSYSTEM) at step (5) and the
wunsolcl will be terminated.

Solution

Sign In with your My Oracle Support account

Don't have a My Oracle Support account? Click to get started

My Oracle Support provides customers with access to over a
Million Knowledge Articles and hundreds of Community platforms