home *** CD-ROM | disk | FTP | other *** search
- This really isn't a bug so much as a deficiency
- in the code. We are running Opus 38.26 and recently
- had need to increase the constant TTSIZE (in config.h)
- above the default 10216. It turns out that this
- breaks the garbage collector which will fail
- to completely clear the array bitmapi
- if given a TTSIZE greater 10216 (during the
- clearing out of bit maps). The offending code
- is in Talloc.c (or alloc.c, depending on your Opus).
- The old code is:
-
- /* try the movc5 to clear the bit maps */
- /* the maximum number of bytes we can clear in one sweep is
- * 2^16 (or 1<<16 in the C lingo)
- */
- bytestoclear = ((((int)datalim)-((int)beginsweep)) >> 9) * 16;
- if(bytestoclear > MAXCLEAR)
- {
- blzero(((int) &bitmapi[((int)beginsweep>>7)]) + MAXCLEAR,
- bytestoclear - MAXCLEAR);
- bytestoclear = MAXCLEAR;
- }
- blzero((int)&bitmapi[((int)beginsweep)>>7],bytestoclear);
-
- and the fixed version that we have been running for several weeks
- now is:
-
- /* try the movc5 to clear the bit maps */
- /* the maximum number of bytes we can clear in one sweep is
- * 2^16 (or 1<<16 in the C lingo)
- */
- bytestoclear = ((((int)datalim)-((int)beginsweep)) >> 9) * 16;
- {int count = 0;
- while (bytestoclear > 0) {
- if(bytestoclear > MAXCLEAR)
- {
- blzero(((int) &bitmapi[((int)beginsweep>>7)])+count*MAXCLEAR,
- MAXCLEAR);
- ++count;
- }
- else
- blzero(((int)&bitmapi[((int)beginsweep)>>7]+count*MAXCLEAR),
- bytestoclear);
- bytestoclear -= MAXCLEAR;
- }
- }
-
- The old code is still present in Opus 38.56.
-
- Alfred Correira
- Paul Robertson
- ...ucbvax!nbires!ctvax!alfred (UUCP)
- alfred.ct@Rand-Relay (CSNET)
-
-