Skip to main content

Hi

A strange behavior, we have a subr WI.LOG which call another subr GET.PORT which make a simple OCONV(0,'U50BB')

U50BB run fine million times a day. 

Sometime the session seems 'suspended' and PORT. STATUS LAYER STACK return GET.PORT at 0x000000000 ! 

After a while, the system continue...

I suppose its a lock situation ! Semaphore lock ? 

Is someone experience a subr call 'stopped' like this ? 

Adress 0x000000 is strange ? 

Thanks for any comment. 

Manu

BASIC run machine GET.PORT 0x00000000
BASIC run machine WI.LOG 0x00000028

Hi

A strange behavior, we have a subr WI.LOG which call another subr GET.PORT which make a simple OCONV(0,'U50BB')

U50BB run fine million times a day. 

Sometime the session seems 'suspended' and PORT. STATUS LAYER STACK return GET.PORT at 0x000000000 ! 

After a while, the system continue...

I suppose its a lock situation ! Semaphore lock ? 

Is someone experience a subr call 'stopped' like this ? 

Adress 0x000000 is strange ? 

Thanks for any comment. 

Manu

BASIC run machine GET.PORT 0x00000000
BASIC run machine WI.LOG 0x00000028

Do you have a custom U50BB? A VLIST of WI.LOG and GET.PORT to see what is at address 0x28 and 0x0, respectively, is a good first step.

While the stack trace may appear stopped, is it accumulating CPU?


Hi

A strange behavior, we have a subr WI.LOG which call another subr GET.PORT which make a simple OCONV(0,'U50BB')

U50BB run fine million times a day. 

Sometime the session seems 'suspended' and PORT. STATUS LAYER STACK return GET.PORT at 0x000000000 ! 

After a while, the system continue...

I suppose its a lock situation ! Semaphore lock ? 

Is someone experience a subr call 'stopped' like this ? 

Adress 0x000000 is strange ? 

Thanks for any comment. 

Manu

BASIC run machine GET.PORT 0x00000000
BASIC run machine WI.LOG 0x00000028

I find the best way to find out what's really going on under the hood is to examine the UNIX process stack using gdb

*** Be extremely careful if you are not sure what you're doing, especially on Production servers ***

gdb uvsh [PID]

Issue the bt (Back Trace command)

Issue the 'q' (Quit command) to exit, be sure to quit gdb ASAP otherwise there is a risk of impacting other UniVerse sessions

(gdb) bt
#0  0x00007fb2de6d8c07 in pause () from /usr/lib64/libc.so.6
#1  0x00007fb2dff5461f in UVInternalSleep () from /opt/u2/uv/bin/libuniverse.so
#2  0x00007fb2dfc8ea0e in do_sleep () from /opt/u2/uv/bin/libuniverse.so
#3  0x00007fb2dfc8eaa9 in zzzzz () from /opt/u2/uv/bin/libuniverse.so
#4  0x00007fb2dfade10f in clexec () from /opt/u2/uv/bin/libuniverse.so
#5  0x00007fb2dfc696f2 in startup_continue () from /opt/u2/uv/bin/libuniverse.so
#6  0x00000000004026c0 in main ()
(gdb) q
A debugging session is active.
        Inferior 1 [process 297255] will be detached.
Quit anyway? (y or n) y
Detaching from program: /opt/u2/uv/bin/uvsh, process 297255
[Inferior 1 (process 297255) detached]

If you see a DB...semp function in the stack then you're likely to attempting to obtain (or could be releasing) a Semaphore but you may also see clues as to why your process is locking up, the top frame (#0) of the stack should detail the specific System Call that is taking place.

You could also view the System Call stack using the 'cat' command on the /proc/[PID]/stack, but this will not show details of the UniVerse process stack

# cat /proc/297255/stack
[<0>] __do_sys_pause+0x30/0x60
[<0>] do_syscall_64+0x59/0x90
[<0>] entry_SYSCALL_64_after_hwframe+0x77/0xe1