$! ------------------ CUT HERE ----------------------- $ v='f$verify(f$trnlnm("SHARE_UNPACK_VERIFY"))' $! $! This archive created by VMS_SHARE Version 8.2 $! On 5-FEB-1993 14:49:03.35 By user GOATHUNTER (@WKUVX1.BITNET) $! $! The VMS_SHARE software that created this archive $! was written by Andy Harper, Kings College London UK $! -- December 1992 $! $! Credit is due to these people for their original ideas: $! James Gray, Michael Bednarek $! $! TO UNPACK THIS SHARE FILE, CONCATENATE ALL PARTS IN ORDER $! AND EXECUTE AS A COMMAND PROCEDURE ( @name ) $! $! THE FOLLOWING FILE(S) WILL BE CREATED AFTER UNPACKING: $! 1. MNOWAIT.DESC;1 $! 2. MNOWAIT.DSJ;1 $! $set="set" $set symbol/scope=(nolocal,noglobal) $f=f$parse("SHARE_UNPACK_TEMP","SYS$SCRATCH:."+f$getjpi("","PID")) $e="write sys$error ""%UNPACK"", " $w="write sys$output ""%UNPACK"", " $ if .not. f$trnlnm("SHARE_UNPACK_LOG") then $ w = "!" $ ve=f$getsyi("version") $ if ve-f$extract(0,1,ve) .ges. "4.4" then $ goto start $ e "-E-OLDVER, Must run at least VMS 4.4" $ v=f$verify(v) $ exit 44 $unpack: subroutine ! P1=filename, P2=checksum, P3=attributes $ if f$parse(P1) .nes. "" then $ goto dirok $ dn=f$parse(P1,,,"DIRECTORY") $ w "-I-CREDIR, Creating directory ''dn'" $ create/dir 'dn' $ if $status then $ goto dirok $ e "-E-CREDIRFAIL, Unable to create ''dn' File skipped" $ delete 'f'* $ exit $dirok: $ x=f$search(P1) $ if x .eqs. "" then $ goto file_absent $ e "-W-EXISTS, File ''P1' exists. Skipped" $ delete 'f'* $ exit $file_absent: $ w "-I-UNPACK, Unpacking file ", P1 $ n=P1 $ if P3 .nes. "" then $ n=f $ if .not. f$verify() then $ define/user sys$output nl: $ EDIT/TPU/NOSEC/NODIS/COM=SYS$INPUT 'f'/OUT='n' PROCEDURE GetHex(s,p)LOCAL x1,x2;x1:=INDEX(t,SUBSTR(s,p,1))-1;x2:=INDEX(t, SUBSTR(s,p+1,1))-1;RETURN 16*x1+x2;ENDPROCEDURE; PROCEDURE SkipPartsep LOOP EXITIF MARK(NONE)=END_OF(b);EXITIF INDEX(ERASE_LINE, "-+-+-+-+-+-+-+-+")=1;ENDLOOP;ENDPROCEDURE;PROCEDURE ProcessLine LOCAL c,s,l,b, n,p;c := ERASE_CHARACTER(1);s := ERASE_LINE;IF c = "X" THEN SPLIT_LINE; ENDIF; MOVE_HORIZONTAL(-1);l := LENGTH(s);p := 1;LOOP EXITIF p > l;c := SUBSTR(s,p,1); p := p+1;CASE c FROM ' ' TO '`' ['`']: COPY_TEXT(ASCII(GetHex(s,p))); p:=p+2;[ ' ']: p:=p+1;[INRANGE,OUTRANGE]: COPY_TEXT(c);ENDCASE;ENDLOOP;ENDPROCEDURE; PROCEDURE Decode POSITION(BEGINNING_OF(b));LOOP EXITIF MARK(NONE)=END_OF(b); IF INDEX(CURRENT_LINE,"+-+-+-+-+-+-+-+-")=1 THEN SkipPartSep;ELSE ProcessLine; MOVE_HORIZONTAL(1);ENDIF;ENDLOOP;ENDPROCEDURE;SET(FACILITY_NAME,"UNPACK");SET( SUCCESS,OFF);SET(INFORMATIONAL,OFF);t:="0123456789ABCDEF";f:=GET_INFO( COMMAND_LINE,"file_name");b:=CREATE_BUFFER(f,f);Decode;WRITE_FILE(b,GET_INFO( COMMAND_LINE,"output_file"));QUIT; $ if p3 .eqs. "" then $ goto dl $ open/write fdl &f $ write fdl "RECORD" $ write fdl P3 $ close fdl $ w "-I-CONVRFM, Converting record format to ", P3 $ convert/fdl=&f &f-1 &P1 $dl: delete 'f'* $ checksum 'P1' $ if checksum$checksum .nes. P2 then $ - e "-E-CHKSMFAIL, Checksum of ''P1' failed." $ exit $ endsubroutine $start: $! $ create 'f' XThis`20file`20offers`20a`20routine`20previously`20published`20in`20the`20Janua Vry/February`20 X1993`20issue`20of`20Digital`20Systems`20Journal.`20The`20code`20comes`20from V`20OpenVMS`20guru`20 XBruce`20Ellis'`20article`20"OPenVMS`20Internals:`20Oh`20Wait,`20MNOWAIT!"`20wh Vich`20ran`20on`20 Xpage`2042.`20In`20this`20article,`20Bruce`20Ellis`20explains`20techniques`20fo Vr`20deleting`20 Xprocesses`20that`20are`20in`20the`20RWAST`20and/or`20MUTEX`20wait`20states`20a Vnd`20seem`20unable`20to`20 Xbe`20deleted. $ call unpack MNOWAIT.DESC;1 1144407417 "" $! $ create 'f' X$`20 X$`20type`20mnowait.mar X;************************************************************************** X; X;`09Program:`09MNOWAIT`20-`20Kills`20some`20MWAITing`20processes X;`09Author:`09`09Bruce`20Ellis X;`09`09`09The`20VASTEK`20Company,`20Incorporated X;`09Date`20Written:`09Sometime`20in`201982. X;`09Notes: X;`09`09Accepts`20a`20PID`20and`20kills`20the`20target`20process`20after`20sett Ving X;`09`09the`20SSRWAIT`20bit`20and`20clearing`20the`20delete`20pending`20bit X;`09`09in`20the`20status`20longword`20of`20the`20PCB. X;`09`09Will`20not`20kill`20all`20flavors`20of`20MWAITing`20procsses. X;`09`09Could`20(though`20we`20have`20not`20seen`20it)`20crash`20the`20system. X; X;`09Required`20privileges:`09CMKRNL`20and`20WORLD`20 X;************************************************************************** X;*`20include`20files. X`09.library`09/sys$library:lib.mlb/ X`09.link`09/sys$system:sys.stb/ X;*`20Macro`20to`20check`20status`20of`20system`20service`20calls. X`09.macro`09check`09?l X`09blbs`09r0,l X`09$exit_s`09r0 Xl: X`09.endm`09check X;*`20Include`20process`20control`20block`20definitions. X`09$pcbdef X;*`20Constants XPID_SIZE`20=`208 X X`09.psect`09data`20`09wrt,noexe,shr X;************************************************************************** X;`20Start`20of`20data`20area. X;************************************************************************** Xlock_start:`09`09`09;Lock`20down`20all`20of`20program`20out`20simplicity X`09`09`09`09;`20It`20is`20only`20necessary`20to`20lock`20down`20code`20 X`09`09`09`09;`20and`20data`20acessed`20at`20ipl`20>2 X;*`20Prompt`20string Xprompt_for_pid: X`09.ascid`09/Please`20enter`20PID:`20/ X X;*`20String`20descriptor`20to`20hold`20ascii`20representation`20of`20process V`20id Xpid_desc: X`09.long`09PID_SIZE X`09.address`0910$ X10$:`09.blkb`09PID_SIZE X;*`20storage`20for`20binary`20representation`20of`20pid. Xpid:`09.long`090 X;************************************* X;*`09Argument`20list`20for`20the`20SYS$CMKRNL`20call X;*`09Note:`20This`20order`20is`20important`20for`20the X;*`09exe$nampid`20call`20performed`20in`20the`20kernel`20mode`20routine.`20 X;************************************* Xkargs:`09.long`091 X`09.address`09pid X`09.long`090 X;*`20Argument`20list`20for`20the`20SYS$LKWSET`20call. Xlock_addr: X`09.address`09lock_start X`09.address`09lock_end X X;*************************************************** X;*`09Start`20of`20code`20area.`20 X;*************************************************** X`09.psect`09code`09exe,nowrt,shr X`09.entry`09mnowait,`5Em<> X;************************************************* X;*`09Prompt`20for`20and`20read`20the`20pid X;************************************************* X`09pushal`09pid_desc X`09pushal`09prompt_for_pid X`09pushal`09pid_desc X`09calls`09#3,g`5Elib$get_input X`09check X;************************************************* X;*`09Convert`20the`20pid`20to`20binary X;************************************************* X`09pushal`09pid X`09pushal`09pid_desc X`09calls`09#2,g`5Eots$cvt_tz_l X`09check X;************************************************* X;*`09Lock`20down`20code`20accessed`20at`20high`20ipl X;************************************************* X`09$lkwset_s`09inadr=lock_addr X`09check X;************************************************* X;*`09Get`20into`20kernel`20mode`20and`20blast`20the`20bits X;************************************************* X`09$cmkrnl_s`09routin=blast_bits,arglst=kargs X`09check X;************************************************* X;*`09Now`20blow`20away`20the`20target`20process. X;************************************************* X`09$delprc_s`09pidadr=pid X`09ret X;********************************************************* X;* X;*`09Start`20of`20kernel`20mode`20subroutine,`20blast_bits X;*`09Inputs:`094(ap)`09contains`20a`20pid`20address X;*`09`098(ap)`09contains`20a`20process`20name`20descriptor`20address`20or`200 X;* X;*`09Outputs: X;*`09`09SSRWAIT`20bit`20of`20target`20process`20is`20set X;*`09`09DELPEN`20bit`20is`20cleared X;* X;********************************************************* X`09.entry`09blast_bits,`5Em X`09jsb`09g`5Eexe$nampid X`09blbc`09r0,outta_here`09`09`09;Locate`20the`20PCB`20address`20of`20 X`09`09`09`09`09`09;`20the`20target`20process. X`09bisl`09#pcb$m_ssrwait,pcb$l_sts(r4)`09;Set`20the`20no`20resource`20wait`20b Vit. X`09bicl`09#pcb$m_delpen,pcb$l_sts(r4)`09;Clear`20the`20delete`20pending`20bit X`09unlock`09lockname=SCHED,newipl=#0`09;Release`20the`20spinlock`20acquired X`09`09`09`09`09`09;`20by`20exe$nampid X`09movl`09#ss$_normal,r0 Xoutta_here: X`09ret Xlock_end: X`09.end`09mnowait X X`0C X X$`20 X$`20macro`20force_tmo X$`20link`20force_tmo X$`20 X$`20 X$`20type`20force_tmo.mar X;`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E V`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E V`5E`5E`5E`5E`5E`5E`5E X;`09Program:`09FORCE_TMO X;`09Author:`09`09Billy`20Bitsenbites`20(Bruce`20Ellis) X;`09Synopsis:`09Changes`20the`20expected`20time`20out`20interval X;`09`09`09of`20a`20device`20to`2015`20seconds`20from`20now. X;`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E V`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E V`5E`5E`5E`5E`5E`5E`5E X;*`20Include`20files X`09.library`09/sys$library:lib.mlb/ X`09.link`09`09/sys$system:sys.stb/ X;*`20Constants X`09$ucbdef`09`09;*`20Unit`20control`20block`20offsets X`09$ipldef XDEVNAME_MAX`20=`2015 XTIME_TIL_TMO`20=`2015 X X`09.psect`09data`09noshr,noexe,wrt X;*`20Storage`20for`20the`20device`20name`20descriptor Xdevnam:`09.long`09DEVNAME_MAX X`09.address`0910$ X10$:`09.blkb`09DEVNAME_MAX X;*`20Prompt`20for`20device`20name Xdev_prompt: X`09.ascid`09/Enter`20device`20to`20be`20timed`20out:/ X X X`09.psect`09code`09nowrt,exe,shr X`09.entry`09force_tmo,`5Em<> X;`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E V`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E V`5E`5E`5E`5E`5E`5E`5E`5E X;`09Get`20device`20name`20to`20unload`20monitor`20for X;`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E V`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E V`5E`5E`5E`5E`5E`5E`5E`5E X`09pushal`09devnam X`09pushal`09dev_prompt X`09pushal`09devnam X`09calls`09#3,g`5Elib$get_input X`09blbs`09r0,lab X`09$exit_s`09r0 X;`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E V`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E V`5E`5E`5E`5E`5E`5E`5E`5E X;`09Change`20the`20time`20out`20interval`20of`20the`20device. X;`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E V`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E V`5E`5E`5E`5E`5E`5E`5E`5E Xlab:`09$cmkrnl_s`09routin=kernel_setup X`09ret X;*********************************************************************** X;`09Kernel`20mode`20setup`20code`20to`20search`20I/O`20data`20base X;`09and`20update`20the`20time`20out`20interval`20of`20the`20selected`20device. V X;*********************************************************************** X`09.entry`09kernel_setup,`5Em X;`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E V`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E V`5E`5E`5E`5E`5E`5E`5E`5E X;`09Grab`20a`20write`20mutex`20on`20the`20i/o`20database X;`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E V`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E V`5E`5E`5E`5E`5E`5E`5E`5E X`09moval`09g`5Eioc$gl_mutex,r0 X`09jsb`09g`5Esch$lockw X;`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E V`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E V`5E`5E`5E`5E`5E`5E`5E`5E X;`09Search`09for`20ucb`20address`20of`20this`20device X;`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E V`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E V`5E`5E`5E`5E`5E`5E`5E`5E X`09moval`09devnam,r1 X`09jsb`09g`5Eioc$searchdev X`09blbs`09r0,no_dev_error`09`09;If`20error`20scram X`09pushl`09r0 X`09brb`09dev_error Xno_dev_error: X`09LOCK`09lockname=TIMER X`09addl3`09#TIME_TIL_TMO,g`5Eexe$gl_abstim,ucb$l_duetim(r1) X`09`09`09`09`09;get`20the`20the`20current`20up`20time`20and X`09`09`09`09`09;`20add`2015`20seconds`20to`20it`20and`20store`20it`20in X`09`09`09`09`09;`20the`20time`20out`20value`20of`20the`20UCB X`09UNLOCK`09lockname=TIMER,newipl=#ipl$_astdel X`09pushl`09#ss$_normal`09`09;Note`20success Xdev_error: X`09moval`09g`5Eioc$gl_mutex,r0`09;Free`20up`20the`20mutex`20on`20the`20io`20da Vtabase X`09movl`09g`5Ectl$gl_pcb,r4 X`09jsb`09g`5Esch$unlock X`09popl`09r0 X`09ret X`09.end`09force_tmo X$`20 X$`20show`20dev`20mu X XDevice`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Device`20`20`20 V`20`20`20`20`20`20`20`20Error`20`20`20`20Volume`20`20`20`20`20`20`20`20`20Free V`20`20Trans`20Mnt X`20Name`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Status`20`20 V`20`20`20`20`20`20`20`20`20Count`20`20`20`20`20Label`20`20`20`20`20`20`20`20Bl Vocks`20Count`20Cnt XLABDOG$MUA0:`20`20`20`20`20`20`20`20`20`20`20`20Online`20`20`20`20`20`20`20 V`20`20`20`20`20`20`20`200 XLABDOG$MUA255:`20`20`20`20`20`20`20`20`20`20Online`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`200 X$`20set`20process/privileges=CMKRNL X$`20 X$`20!`20NOTE:`20You`20should`20confirm`20that`20a`20process`20is`20waiting`20f Vor`20a`20timeout X$`20!`20on`20the`20appropriate`20device`20before`20running`20this`20program. X$`20run`20force_tmo XEnter`20device`20to`20be`20timed`20out:MUA0: X$`20 X$`20 $ call unpack MNOWAIT.DSJ;1 101381885 "" $ v=f$verify(v) $ exit