Ravenbrook / Projects / Memory Pool System / Issues

Memory Pool System


MPS issue job001706

Title: MPS PoolAMC could (if no shield cache) assert in LockClaim
Status: closed
Priority: essential
Assigned user: Richard Kistruck
Product: mps
Organization: Ravenbrook
Description: MPS 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
Analysis: RHSK 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 found: unknown
Observed in: 1.108.0
Introduced in: 1.100.0
Test procedure: none
Created by: Richard Kistruck
Created on: 2007-08-22 11:25:01
Last modified by: Richard Kistruck
Last modified on: 2007-09-12 17:05:10
History: 2007-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).

Generated at 2008-09-06 06:12:24 by $Id: //info.ravenbrook.com/infosys/cgi/issue.cgi#430 $

Copyright © Ravenbrook Limited. This document is provided "as is", without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this document. You may not duplicate or reproduce this document in any form without the express permission of the copyright holder.

Ravenbrook / Projects / Memory Pool System / Issues