summaryrefslogtreecommitdiff
path: root/Bugs/substleak
blob: ff14446488640565d487e3c5a4fe401e300788cd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
Return-Path: Martin.Ward@durham.ac.uk
Return-Path: <Martin.Ward@durham.ac.uk>
Received: from scalpel.netlabs.com by netlabs.com (4.1/SMI-4.1)
	id AA01931; Thu, 20 Jan 94 03:56:39 PST
Received: from netlabs.com (vaccine-eng1.netlabs.com) by scalpel.netlabs.com (4.1/SMI-4.1)
	id AA09639; Thu, 20 Jan 94 03:56:36 PST
Received: from sun2.nsfnet-relay.ac.uk by netlabs.com (4.1/SMI-4.1)
	id AA01923; Thu, 20 Jan 94 03:56:01 PST
Via: uk.ac.durham; Thu, 20 Jan 1994 11:47:16 +0000
Received: from easby.dur.ac.uk by durham.ac.uk; Thu, 20 Jan 94 11:47:05 GMT
Received: from ws-csm3.durham.ac.uk (ws-csm3.dur) by uk.ac.durham.easby;
          Thu, 20 Jan 94 11:46:29 GMT
From: Martin.Ward@durham.ac.uk (Martin Ward)
Date: Thu, 20 Jan 94 11:46:27 GMT
Message-Id: <AA00871.9401201146.ws-csm3@uk.ac.durham>
To: des0mpw@easby.durham.ac.uk, lwall@scalpel.netlabs.com
Subject: Re: My last message

>: After saying I was stumped, I managed to track down the problem!
>: The problem was caused by a line much higher up:
>: 
>: $seqpat = "$bs[s]\000e\000q\000\{\000";       # } hack
>: 
>: Changing this by adding {} gives:
>: 
>: $seqpat = "${bs}[s]\000e\000q\000\{\000";       # } hack
>: 
>: which worked! No idea why :-)
>
>It apparently intuited $bs[s] to be an array reference.

Aha! I think the interpretation is:
"$bs[      s] .....
^^^^^      ^^
array ref  Therefore this is an expression, so "s]" is the start of
           a pattern match/replace, so it scans for ...]....]

I found the line by repeatedly chopping away everything after (and including)
the line where perl _thought_ the error started. This gradually worked back
through a nasty cascade of errors!

>: No speed improvement this time (the improvement in user time was swamped
>: by an increase in system time. This may be because it uses 5048k of
>: data/stack space, compared with 985k for perl4).
>
>That doesn't sound good.  I hope it's a bug.  Does it grow continuously?
>Hopefully it's just a memory leak.

For perl4 the memory size (shown by top) grows by about 100-150k per 2 seconds,
for perl5 it grows by about 1 - 1.5 Meg per 2 seconds. I don't use the script
very often (and I have over 100 Meg of swap space) so its not a big problem.
Still, with a 124k input file, the size for perl5 went up to 40 Meg!

I have tracked down a memory leak, which is basically one line from the
texqed script. Store this script in "tmp" and run "perl tmp /vmunix"
(or some other large random file). Monitor the process using "top" in 
another window.

Perl4 is OK but perl5 leaks like a leaky cistern.


#!/usr/local/bin/perl
 
# print a "." every $interval lines:
$interval = 10;
open (PAIRS, "$ARGV[0]");
open (OUT, "> /dev/null");
$bs = "\\\\" . "\000";
for (;;) {
  $line++;
  if (($line % $interval) == 0) {
    print STDERR ".";
  }
  read(PAIRS, $_, 20);
  last if ($_ eq "");
  
  s/$bs([_^\\])\000/\\\377$1\377/g;
  
  print OUT ;
}

print STDERR "\n";



I hope you find this useful!

NB Changing the "s/.../.../g" to an "m/.../" (with the same pattern)
makes the leak go away even on input files where the pattern NEVER matches!!

			Martin.

JANET: Martin.Ward@uk.ac.durham    Internet (eg US): Martin.Ward@durham.ac.uk
or if that fails:  Martin.Ward%uk.ac.durham@nsfnet-relay.ac.uk  
or even: Martin.Ward%DURHAM.AC.UK@CUNYVM.CUNY.EDU
BITNET: Martin.Ward%durham.ac.uk@UKACRL UUCP:...!uknet!durham!Martin.Ward
[Last acked 0.7 days ago--not acked]