OK, it turns out this has nothing to do with Perl directly, but since it
came up here, I'll file my conclusions here. Can someone with a support
contract please file an SPR with the details below? The bug is easily
reproduced with the small C program (cdproccrash.c) included here. The
basic issue is that the sys$check_access call never returns and the process
in which it is running abruptly exits.
The test shown was on OpenVMS Alpha V7.2-1, standalone Alphastation 255
4/266, but the same thing happens on v7.3, DPW 500au. Though it's possible
I've missed something, nothing that's appeared on the ECO mailing list in
the last couple of years mentions sys$check_access. Various combinations of
privileges, including ALL and NOALL, show the same result. It does not seem
to matter whether or not the CD-ROM drive is mounted /media=cdrom.
$ mount/over=id dka400
%MOUNT-I-WRITELOCK, volume is write locked
%MOUNT-I-CDROM_ISO, VMSDOC073:DISC_1_OF_1 (1 of 1) , mounted on _THETIS$DKA400:
$ dir/full dka400:[000000]index.html
Directory DKA400:[000000]
INDEX.HTML;1 File ID: (4,11,0)
Size: 235/235 Owner: [0,0]
Created: 4-APR-2001 10:37:16.00
Revised: 4-APR-2001 10:37:16.00 (1)
Expires: <None specified>
Backup: <No backup recorded>
Effective: <None specified>
Recording: 4-APR-2001 10:37:16.00
File organization: Sequential
Shelved state: Online
Caching attribute: Writethrough
File attributes: Allocation: 235, Extend: 0, Global buffer count: 0, Version limit:
0, Backups disabled
Record format: Undefined, maximum 0 bytes, longest 0 bytes
Record attributes: None
RMS attributes: None
Journaling enabled: None
File protection: System:RWED, Owner:RWED, Group:RWED, World:RWED
Access Cntrl List: None
Client attributes: None
Total of 1 file, 235/235 blocks.
$
$ mcr []cdproccrash dka400:[000000]index.html
After I die, do ACCOUNTING/SINCE/IDENT=1277 to see what happened to me.
Checking read access to dka400:[000000]index.html
Press return to continue:
At which point the process quickly disappears and the accounting log shows
it to have terminated with an access violation:
$ ACCOUNTING/SINCE/IDENT=1277
Date / Time Type Subtype Username ID Source Status
--------------------------------------------------------------------------------
30-APR-2002 12:41:55 PROCESS INTERACTIVE CRAIG 00001277 TNA10: 0000000C
Here's the program:
$ type cdproccrash.c
#include <acldef.h>
#include <armdef.h>
#include <chpdef.h>
#include <climsgdef.h>
#include <descrip.h>
#include <jpidef.h>
#include <libdef.h>
#include <lib$routines.h>
#include <stsdef.h>
#include <starlet.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct itmlst_3 {
unsigned short int buflen;
unsigned short int itmcode;
void *bufadr;
unsigned short int *retlen;
};
int main(int argc, char *argv[])
{
unsigned int sts, jpi_iosb[2], mypid, access, objtyp;
static char usrname[12];
static struct dsc$descriptor_s usrdsc = {0, DSC$K_DTYPE_T, DSC$K_CLASS_S, usrname};
unsigned short int retlen;
struct dsc$descriptor_s namdsc = {0, DSC$K_DTYPE_T, DSC$K_CLASS_S, 0};
struct itmlst_3 armlst[2] = {
{sizeof access, CHP$_ACCESS, &access, &retlen},
{0,0,0,0}
};
struct itmlst_3 jpilst[3] = {
{sizeof mypid, JPI$_PID, &mypid, &retlen},
{sizeof usrname, JPI$_USERNAME, &usrname, &usrdsc.dsc$w_length},
{0,0,0,0}
};
/* If there aren't any parameters, tell the user how it's done and exit. */
if (argc < 2) {
fprintf(stderr, "Usage: %s filespec\n", argv[0]);
exit(CLI$_VALREQ);
}
/* Find out our own pid and username. */
sts = sys$getjpiw(0,0,0,jpilst,jpi_iosb,0,0);
if (!$VMS_STATUS_SUCCESS(sts)) exit(sts);
if (!$VMS_STATUS_SUCCESS(jpi_iosb[0])) exit(jpi_iosb[0]);
printf("After I die, do ACCOUNTING/SINCE/IDENT=%x to see what happened to
me.\n",mypid);
access = ARM$M_READ;
objtyp = ACL$C_FILE;
namdsc.dsc$a_pointer = argv[1];
namdsc.dsc$w_length = strlen(argv[1]);
printf("Checking read access to %s\nPress return to continue: ",
namdsc.dsc$a_pointer);
(void) getchar();
sts = sys$check_access(&objtyp,&namdsc,&usrdsc,armlst,0,0,0,0);
if ($VMS_STATUS_SUCCESS(sts)) printf("Access succeeded; is the file on a
CD-ROM?\n");
exit(sts);
}
=== cut ===
Here's the ECO info for the system:
$ product show history vms*
----------------------------------- ----------- ----------- --------------------
PRODUCT KIT TYPE OPERATION DATE AND TIME
----------------------------------- ----------- ----------- --------------------
DEC AXPVMS VMS721_ACRTL V4.0 Patch Install 24-APR-2002 13:57:43
DEC AXPVMS VMS721_RMS V4.0 Patch Install 24-APR-2002 13:57:43
DEC AXPVMS VMS721_AUDSRV V2.0 Patch Install 22-FEB-2002 11:45:54
DEC AXPVMS VMS721_LAN V3.0 Patch Install 22-FEB-2002 11:45:54
DEC AXPVMS VMS721_RMS V3.0 Patch Install 22-FEB-2002 11:45:54
DEC AXPVMS VMS721_SYSLOA V2.0 Patch Install 22-FEB-2002 11:45:54
DEC AXPVMS VMS721_DW_MOT_MUP V1.0 Patch Install 02-JAN-2002 13:55:26
DEC AXPVMS VMS721_SYS V11.0 Patch Install 02-JAN-2002 13:21:46
DEC AXPVMS VMS721_DRIVER V3.0 Patch Install 31-OCT-2001 14:08:42
DEC AXPVMS VMS721_DW_MOT_MUP V1.0 Patch Install 31-OCT-2001 14:08:42
DEC AXPVMS VMS721_MOUNT96 V3.0 Patch Install 31-OCT-2001 14:08:42
DEC AXPVMS VMS721_SYS V11.0 Patch Install 31-OCT-2001 14:08:42
DEC AXPVMS VMS721_SYS V10.0 Patch Install 25-JUL-2001 15:51:27
DEC AXPVMS VMS721_UPDATE V3.0 Patch Install 25-JUL-2001 15:38:53
DEC AXPVMS VMS721_SYS V9.0 Patch Install 13-MAR-2001 13:40:19
DEC AXPVMS VMS721_UPDATE V1.0 Patch Install 13-MAR-2001 13:23:19
DEC AXPVMS VMS721_PCSI V1.0 Patch Install 13-MAR-2001 12:01:09
DEC AXPVMS VMS V7.2-1 Oper System Install 31-JAN-2001 13:11:55
----------------------------------- ----------- ----------- --------------------
18 items found
$
If anyone wants more info, please let me know, but I think that will be more
than enough to reproduce it. If I don't hear from someone that this has
been reported, I guess I'll send it to comp.os.vms and see if one of the
engineers notices it.