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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
4-Mar-87 18:29:46-MST,5297;000000000000
Mail-From: BEEBE created at 4-Mar-87 18:29:43
Date: Wed 4 Mar 87 18:29:43-MST
From: "Nelson H.F. Beebe" <Beebe@UTAH-SCIENCE.ARPA>
Subject: DVI driver update #6
To: $90%dhdurz1.bitnet@WISCVM.WISC.EDU, AustinS%ucbcmsa.edu@UTAH-CS.ARPA,
Berg-lists%gsb-why@SCORE.STANFORD.EDU, CEL@CITHEX.CALTECH.EDU,
Celoni@SCORE.STANFORD.EDU, Crawford-J%ohio-state.arpa@UTAH-CS.ARPA,
CRM8701%tamvenus.bitnet@WISCVM.WISC.EDU,
Dan%buchmd.bu-cs.arpa@UTAH-CS.ARPA, David%ci-dandelion.uucp@EDDIE.MIT.EDU,
Gaspard%hroeur5.bitnet@WISCVM.WISC.EDU,
Goodall%admin.okanagan.bcc.cdn@RELAY.CS.NET,
James%vaxe.coe.northeastern.edu@UTAH-CS.ARPA,
JRP%nplpsg.uucp@UTAH-CS.ARPA, Karney%ppc.mfenet@NMFECC.ARPA,
Lamy%ai.toronto.edu@RELAY.CS.NET, MPC91B%dgogwd01.bitnet@WISCVM.WISC.EDU,
RJones%uwovax.bitnet@WISCVM.WISC.EDU, RS%gnome.cs.cmu.edu@UTAH-CS.ARPA,
Simon%m_scrvx2%slb-test.csnet.csnet-relay@CSNET-RELAY.ARPA,
Stone%ruthep.rutgers.edu@RUTGERS.RUTGERS.EDU,
System%uvphys.bitnet@WISCVM.WISC.EDU, Thobe@EE.UCLA.EDU,
X854%ddagsi3.bitnet@WISCVM.WISC.EDU, Zeffi%finabo.bitnet@WISCVM.WISC.EDU
cc: beebe@UTAH-SCIENCE.ARPA
X-US-Mail: "Center for Scientific Computation, South Physics, University of Utah, Salt Lake City, UT 84112"
X-Telephone: (801) 581-5254
Message-ID: <12283822029.27.BEEBE@UTAH-SCIENCE.ARPA>
A couple of years ago, I spent some time debugging the
DVIxxx drivers under Eunice (Wollongong's 4.1 BSD Unix
underneath VAX VMS), trying to determine why they core
dumped after completing successfully. The problem was
reported again from a 4.2 Eunice site, and last week from a
4.2 BSD Unix VAX site. It does not occur in 4.3BSD, or in
HPUX, or any other non-Unix system in which the family has
been implemented. Stepping with the debugger, I found that
the program would run successfully right up to the call to
exit() in abortrun.h, then die after it entered exit(). I
hit the problem again today on a 4.2 BSD Unix system on an
Integrated Solutions machine, and can now report a solution.
The report last week from Los Angeles pointed the finger at
fclose(), and indeed, if each call to fclose() makes sure
not to make the call if the file pointer is null, the core
dumps no longer happen. Two modules, abortrun.h and
dviterm.h are affected, and a VAX VMS DIFF listing is
appended to this note. This is definitely a bug in 4.1 and
4.2 Unix, not the DVI drivers, but a workaround is
necessary. The man page (man 3s fclose) states
These routines return EOF if stream is not
associated with an output file, or if buffered data
cannot be transferred to that file.
There is no mention of a subsequent core dump!
I hit a second problem on the Integrated Solutions system:
the global variable errno is not defined in the file
errno.h; it is under VAX VMS and TOPS-20. dvihead.h
therefore needs a change too for these systems. It must be
inside a conditional, because in the coming ANSI C standard,
errno will be defined as a macro in stddef.h, which will not
necessarily expand to an extern int. Why it is not defined
in errno.h is a mystery, since errno is unlikely to be used
without errno.h to get definitions of error symbols.
diff abortrun.h
************
File SYS$LIBROOT:[PLOT79.TEX.DVI]ABORTRUN.H;5
21 if (font_files[k].font_id != (FILE*)NULL)
22 (void)fclose(font_files[k].font_id);
23
24 if (dvifp != (FILE*)NULL)
25 (void)fclose(dvifp);
26 if (plotfp != (FILE*)NULL)
27 (void)fclose(plotfp);
28 if (g_dolog && (g_logfp != (FILE *)NULL))
******
File SYS$LIBROOT:[PLOT79.TEX.DVI]ABORTRUN.H;4
21 (void)fclose(font_files[k].font_id);
22
23 (void)fclose(dvifp);
24 (void)fclose(plotfp);
25 if (g_dolog && (g_logfp != (FILE *)NULL))
************
Number of difference sections found: 1
Number of difference records found: 7
DIFFERENCES /IGNORE=()/MERGED=1-
SYS$LIBROOT:[PLOT79.TEX.DVI]ABORTRUN.H;5-
SYS$LIBROOT:[PLOT79.TEX.DVI]ABORTRUN.H;4
diff dvihead.h
************
File SYS$LIBROOT:[PLOT79.TEX.DVI]DVIHEAD.H;8
338 #if (BSD41 | BSD42)
339 extern int errno; /* not in all errno.h files, sigh... */
340 #endif
341
******
File SYS$LIBROOT:[PLOT79.TEX.DVI]DVIHEAD.H;7
338
************
Number of difference sections found: 1
Number of difference records found: 3
DIFFERENCES /IGNORE=()/MERGED=1-
SYS$LIBROOT:[PLOT79.TEX.DVI]DVIHEAD.H;8-
SYS$LIBROOT:[PLOT79.TEX.DVI]DVIHEAD.H;7
diff dviterm.h
************
File SYS$LIBROOT:[PLOT79.TEX.DVI]DVITERM.H;10
30 if (dvifp != (FILE*)NULL)
31 (void)fclose(dvifp);
32 if (plotfp != (FILE*)NULL)
33 (void)fclose(plotfp);
34
******
File SYS$LIBROOT:[PLOT79.TEX.DVI]DVITERM.H;9
30 (void)fclose(dvifp);
31 (void)fclose(plotfp);
32
************
Number of difference sections found: 1
Number of difference records found: 4
DIFFERENCES /IGNORE=()/MERGED=1-
SYS$LIBROOT:[PLOT79.TEX.DVI]DVITERM.H;10-
SYS$LIBROOT:[PLOT79.TEX.DVI]DVITERM.H;9
-------
|