[Info-vax] %SYSTEM-F-ACCVIO in LIBOTS after several hours

Arne Vajhøj arne at vajhoej.dk
Wed Mar 9 09:19:09 EST 2022


On 3/9/2022 8:58 AM, Mark Daniel wrote:
>> On 2022-03-08, Mark Daniel <mark.daniel at wasd.vsm.com.au> wrote:
>>> Reproducible after several hours of continuous execution.
>>>
>>>> %SYSTEM-F-ACCVIO, access violation, reason mask=04, virtual 
>>>> address=0000000000039B00, PC=FFFFFFFF842341D0, PS=0000001B
>>>> %TRACE-F-TRACEBACK, symbolic stack dump follows
>>>> image     module    routine               line      rel PC           
>>>> abs PC
>>>> LIBOTS                                       0 00000000000121D0 
>>>> FFFFFFFF842341D0
>>>> DECC$SHR  C$TXDOPRINT  putbuf            43567 000000000000CA82 
>>>> FFFFFFFF84BC4FA2
>>>> DECC$SHR  C$TXDOPRINT  decc$$txdoprint   43658 000000000000CD62 
>>>> FFFFFFFF84BC5282
>>>> DECC$SHR  C$TXDOPRINT  sprintf           44192 0000000000012492 
>>>> FFFFFFFF84BCA9B2
>>>> HTTPDMON  HTTPDMON  TcpIpLookup          60709 00000000000109A2 
>>>> 00000000000409A2
>>>> HTTPDMON  HTTPDMON  AddRequest           60536 0000000000009A62 
>>>> 0000000000039A62
>>>> HTTPDMON  HTTPDMON  MonitorHttpd         58867 0000000000001392 
>>>> 0000000000031392
>>>> HTTPDMON  HTTPDMON  main                 58751 0000000000000962 

>>> Line 60790 is
>>>
>>>>        3   60709             sprintf (ares[aCacheIdx], "[%s]", 
>>>> strerror(errno));

> Should be.
> 
> #define CACHE_MAX 16
> 
>     static  aCacheIdx, nCacheIdx;
>     static char  abuf [CACHE_MAX][256],
>                  ares [CACHE_MAX][256],
>                  nbuf [CACHE_MAX][256],
>                  nres [CACHE_MAX][256];
> 8< snip 8<
>        idx = nCacheIdx++ % CACHE_MAX;

And similar for aCacheIdx I presume.

> The ACCVIO is very indeterminate.  I mean the CACHE_MAX limit (16) will 
> have been round-robined many times in the 8+ hours since last activated. 
>   There are thousands/16 over that period.

I would put in a:

if(aCacheIdx < 0 || CACHE_MAX <= aCacheIdx)
{
     printf("We have a problem aCacheIdx = %d\n", aCacheIdx);
}
sprintf (ares[aCacheIdx], "[%s]", strerror(errno));

Or maybe:

if(aCacheIdx < 0 || CACHE_MAX <= aCacheIdx)
{
     printf("We have a problem aCacheIdx = %d\n", aCacheIdx);
}
if(strlen(strerror(errno)) > 255)
{
     printf("We have a problem strlen(strrerror) = %d\n", 
strlen(strerror(errno)));
}
sprintf (ares[aCacheIdx], "[%s]", strerror(errno));

Something must be overwriting something.

Multithreaded code?

Arne



More information about the Info-vax mailing list