[Info-vax] %SYSTEM-F-ACCVIO in LIBOTS after several hours
    Mark Daniel 
    mark.daniel at wasd.vsm.com.au
       
    Wed Mar  9 09:49:25 EST 2022
    
    
  
On 10/3/22 12:49 am, Arne Vajhøj wrote:
> 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.
Yes.
       idx = nCacheIdx++ % CACHE_MAX;
>> 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);
> }
As "debug" statements; can be done.  Would signal on corruption of the 
indices.
2147483647 is a big number of lookups.
At 100/S that's ~249 days before rollover.
The maximum lookup rate is actually once every 2 seconds.
> if(strlen(strerror(errno)) > 255)
> {
>      printf("We have a problem strlen(strrerror) = %d\n", 
> strlen(strerror(errno)));
> }
> sprintf (ares[aCacheIdx], "[%s]", strerror(errno));
As a "debug" statement; can do.
The move to snprintf() should mitigate any effect though.
Will wait and see if that has any effect.
> Something must be overwriting something.
Yes.  And most commonly laid at the feet (or fingertips) of the developer.
> Multithreaded code?
No.
> Arne
-- 
Anyone, who using social-media, forms an opinion regarding anything 
other than the relative cuteness of this or that puppy-dog, needs 
seriously to examine their critical thinking.
    
    
More information about the Info-vax
mailing list