MPS issue job001706

TitleMPS PoolAMC could (if no shield cache) assert in LockClaim
Statusclosed
Priorityessential
Assigned userRichard Kistruck
OrganizationRavenbrook
DescriptionMPS PoolAMC could (if no shield cache) assert in LockClaim

HOWEVER: because of the MPS shield cache, this assert does not seem
to happen. Nonetheless, this is a defect. If something else were
to cause a shield cache flush, the defect would cause a failure. It
is not known whether such a flush could occur.

Assert might be, for example:
MPS ASSERTION FAILURE: res == 0
lockix.c
125

This can be provoked by disabling the shield cache and running
amcsshe with seed 27370 (for example).

Related jobs:
  job000441 - incorrect (but successful) fix for the same symptom
AnalysisRHSK 2007-08-22

The cause is that AMCFix/AMCHeaderFix fails to make
ShieldExpose/Cover calls around access to the from-seg. Two such
calls are missing:
   1. around: length = AddrOffset(ref, (*format->skip)(ref));
2. around: (void)AddrCopy(newBase, AddrSub(ref, headerSize), length);

However, because of the shield cache, the barrier is in fact 'never'
in place at these times (it has been left off, by the shield cache,
after a previous ShieldExpose), so we get away with it.
How foundunknown
Observed in1.108.0
Introduced in1.100.0
Created byRichard Kistruck
Created on2007-08-22 11:25:01
Last modified byRichard Kistruck
Last modified on2007-09-12 17:05:10
History2007-08-22 RHSK Created.

Fixes

Change Effect Date User Description
163171 closed 2007-08-23 17:50:31 Richard Kistruck MPS master: poolamc.c AMCFix, AMCHeaderFix: Correct bad shield
code (but badness was being masked by the shield cache; see
job001706). ShieldExpose(seg) once, and ShieldCover it once, so
that _all_ .exposed.seg statements are between Expose and Cover.
163170 open 2007-08-23 17:28:16 Richard Kistruck MPS master: poolamc.c AMCFix, AMCHeaderFix: (comment only) tag
with ".exposed.seg" statements that require that "seg" (that is:
the 'from' seg) has been ShieldExposed. (Preparatory to fixing
job001706).