home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #16 / NN_1992_16.iso / spool / comp / os / vms / 12783 < prev    next >
Encoding:
Internet Message Format  |  1992-07-25  |  5.1 KB

  1. Path: sparky!uunet!dtix!darwin.sura.net!mips!swrinde!elroy.jpl.nasa.gov!nntp-server.caltech.edu!SOL1.GPS.CALTECH.EDU!CARL
  2. From: carl@SOL1.GPS.CALTECH.EDU (Carl J Lydick)
  3. Newsgroups: comp.os.vms
  4. Subject: Re: How to deallocate a device ALLOCATE'd by someone else?
  5. Message-ID: <1992Jul25.094612.11189@cco.caltech.edu>
  6. Date: 25 Jul 92 09:46:12 GMT
  7. References: <01GMR6JQHG4200008B@VAXF.COLORADO.EDU>
  8. Sender: news@cco.caltech.edu
  9. Reply-To: carl@SOL1.GPS.CALTECH.EDU
  10. Organization: HST Wide Field/Planetary Camera
  11. Lines: 132
  12. Nntp-Posting-Host: sol1.gps.caltech.edu
  13.  
  14. In article <01GMR6JQHG4200008B@VAXF.COLORADO.EDU>, DWING@UH01.Colorado.EDU (Dan Wing) writes:
  15. >Roy Nakatsuka, roy@umbra.gsfc.nasa.gov, wrote:
  16. >
  17. >>Does anyone know of a way in VMS to deallocate a device ALLOCATE'd by another
  18. >>user or process?  It seems that no matter what privileges you have or who you
  19. >>are, even SYSTEM is not allowed to do this.
  20. >
  21. >If the PID that has the device allocated is no longer on the system, you've
  22. >encountered a VMS bug; contact your local office for a program that will
  23. >free the device (also available on DSNlink).
  24. >
  25. >If the PID is currently on the system, a REPLY/USER to remind them usually
  26. >works, and STOP/ID will do it, too.
  27.  
  28. OK, here's a program that's intended to change the ownership of an allocated
  29. device to the master pid of the current job.  I make absolutely no guarantees
  30. about this program, since I didn't write it and haven't tested it extensively. 
  31. If you get it to work, you can run this program, then deallocate the device
  32. from the process with the master pid of your job.  USE AT YOUR OWN RISK!
  33. AND DO NOT USE ANY SIMPLE VARIANT OF THIS PROGRAM TO CHANGE OWNERSHIP OF A
  34. MOUNTED DEVICE!
  35.  
  36.     .TITLE    TEC
  37.     .IDENT    /V01.0/
  38. ;
  39. ;  DEFINE NECESSARY SYMBOLS
  40. ;
  41.     $DDBDEF
  42.     $UCBDEF
  43.     $FABDEF
  44.     $RABDEF
  45.     $JPIDEF
  46.     $IPLDEF
  47.     $DCDEF
  48. ;
  49. ;  $GETJPI FIELD DEFINITIONS
  50. ;
  51. JPIBLK:    .WORD    4            ;BUFFER LENGTH
  52.     .WORD    JPI$_PID        ;INFORMATION TO RETURN CODE
  53.     .ADDRESS    USRPID        ;ADDRESS OF USRPID BUFFER
  54.     .ADDRESS    USRPIDL        ;ADDRESS OF RETURNED LENGTH
  55.     .WORD    4            ;BUFFER LENGTH
  56.     .WORD    JPI$_MASTER_PID        ;INFORMATION TO RETURN CODE
  57.     .ADDRESS    MSTPID        ;ADDRESS OF MSTPID BUFFER
  58.     .ADDRESS    MSTPIDL        ;ADDRESS OF RETURNED LENGTH
  59.     .LONG    0            ;END OF LIST
  60. USRPID:    .BLKL    1            ;PID BUFFER
  61. USRPIDL:.BLKL    1            ;LENGTH OF USER PID
  62. MSTPID:    .BLKL    1
  63. MSTPIDL:.BLKL    1
  64. IOSB:    .BLKQ    1            ;IO STATUS BLOCK
  65. LPAG:    .LONG    JPIBLK,ENDSTUFF        ;INADR FOR $LCKPAG AND $ULKPAG
  66. ;
  67. ;  LOCK PROGRAM IN MEMORY SO A PAGEFAULT WON'T CRASH THE SYSTEM WHILE
  68. ;  EXECUTING IN KERNEL MODE
  69. ;
  70.     .ENTRY    TEC,0
  71.     $LCKPAG_S    INADR=LPAG        ;LOCK PROGRAM IN MEMORY
  72. ;
  73. ;  GET CURRENT PID AND MASTER PID
  74. ;
  75.     $GETJPI_S    ITMLST=JPIBLK,IOSB=IOSB    ;GET USRPID FOR CURRENT PROCESS
  76.     BLBS    R0,24$            ;BRANCH IF NO ERROR
  77.     BRW    ERROR            ;BRANCH IF ERROR
  78. ;
  79. ;  GO STUFF IN CORRECT PID
  80. ;     
  81. 24$:    
  82.     $CMKRNL_S STUFF            ;GO STUFF IN CORRECT PID
  83.                     ;   MUST BE DONE IN EXEC MODE
  84.     BLBC    R0,ERROR        ;IF ERROR OCCURRED BRANCH
  85.     MOVL    #RMS$_SUC,R4        ;INDICATE SUCCESS
  86.     BRW    FINISH            ;GET OUT GRACEFULLY
  87. ;
  88. ;  ERROR PROCESSING
  89. ;
  90. ;    ON UNIDENTIFIED ERROR BRANCH HERE AND EXIT WITH STATUS    
  91. ;
  92. ERROR:    
  93.     MOVL    R0,R4            ;SAVE COMPLETION CODE
  94. FINISH:    $ULKPAG_S    INADR=LPAG    ;UNLOCK MEMORY PAGES
  95.     $EXIT_S    R4            ;EXIT WITH STATUS
  96. ;
  97. ;  FIND JIB AND STUFF PROJECT INTO JIB$T_ACCOUNT
  98. ;
  99.     .ENTRY    STUFF,0            ;ENTRY POINT FOR EXEC ROUTINE
  100.     SETIPL    #IPL$_SYNCH        ;LOCK OUT INTERRUPTS
  101.     MOVL    USRPID,R0        ;SET UP TO CONVERT EPID TO IPID
  102.     JSB    EXE$EPID_TO_IPID    ;CONVERT USRPID
  103.     MOVL    R0,USRPID        ;SAVE USER IPID
  104.     MOVL    MSTPID,R0        ;SET UP TO CONVERT EPID TO IPID
  105.     JSB    EXE$EPID_TO_IPID    ;CONVERT MSTPID
  106.     MOVL    R0,MSTPID        ;SAVE MASTER PID
  107.     MOVL    IOC$GL_DEVLIST,R6    ;GET THE ADDRESS OF THE FIRST DDB
  108.     BRW     CHUNIT            ;IF EQUAL, GO CHECK UNIT
  109. NEXTDEV:
  110.     CMPL    #0,DDB$L_LINK(R6)    ;ANYMORE DEVICES?
  111.     BEQL    ALLDONE            ;IF EQL, NO, GET OUT
  112.     MOVL    DDB$L_LINK(R6),R6    ;ADDRESS OF NEXT DDB TO R6
  113. CHUNIT:
  114.     MOVL    DDB$L_UCB(R6),R7    ;ADDRESS OF FIRST UCB  TO R7
  115.     TSTL    R7
  116.     BEQL    NEXTDEV
  117. NEXTUNIT:
  118.     CMPB    #DC$_TAPE,UCB$B_DEVCLASS(R7)    ;IS THIS A TAPE DEVICE
  119.     BEQL    WHOOWN            ;YES, GO CHECK IT OUT
  120.     CMPB    #DC$_DISK,UCB$B_DEVCLASS(R7)    ;IS THIS A DISK DEVICE
  121.     BNEQ    NEXTDEV            ;NO, GO GET NEXT DEVICE
  122. WHOOWN:    CMPL    MSTPID,UCB$L_PID(R7)    ;DOES THIS DEVICE BELONG TO MASTER
  123.     BEQL    INSERT            ;YES, GO CHANGE OWNER TO USRPID
  124. MOREUNIT:
  125.     CMPL    #0,UCB$L_LINK(R7)    ;NO, ANYMORE UCB'S IN THIS CHAIN
  126.     BEQL    NEXTDEV            ;IF EQL, NO MORE UCBS, GOTO NEXTDEV
  127.     MOVL    UCB$L_LINK(R7),R7    ;GET NEXT UCB IN CHAIN
  128.     BRB    NEXTUNIT        ;TRY NEXT UNIT
  129. INSERT:
  130.     MOVL    USRPID,UCB$L_PID(R7)    ;PUT IN CORRECT PID
  131.     BRW    MOREUNIT        ;GET NEXT UNIT OF THIS DEVICE
  132. ALLDONE:
  133.     MOVL    #RMS$_SUC,R0        ;INDICATE SUCCESS
  134.     SETIPL    #0            ;RESET IPL TO USER, ALLOW INTERRUPTS
  135. ENDSTUFF:
  136.     RET
  137.     .END    TEC
  138. --------------------------------------------------------------------------------
  139. Carl J Lydick | INTERnet: CARL@SOL1.GPS.CALTECH.EDU | NSI/HEPnet: SOL1::CARL
  140.  
  141. Disclaimer:  Hey, I understand VAXen and VMS.  That's what I get paid for.  My
  142. understanding of astronomy is purely at the amateur level (or below).  So
  143. unless what I'm saying is directly related to VAX/VMS, don't hold me or my
  144. organization responsible for it.  If it IS related to VAX/VMS, you can try to
  145. hold me responsible for it, but my organization had nothing to do with it.
  146.