Home Page

PMShell Startup Hang

January 2016. If you always boot OS/2 EComStation to a command line, you may find that the system sometimes hangs when you start PMShell. The problem occurs if:

  1. Your \config.sys file uses 'ProtShell=C:\OS2\CMD.EXE /k [C:\Rube-Goldberg\Init.CMD]' (where the script is optional) instead of the customary 'ProtShell=C:\OS2\PMShell.EXE'; and
  2. Your \config.sys file contains the line 'run=C:\MMOS2\MMFix.EXE'; and
  3. You are using the Snap graphics accelerated video driver; and
  4. You wait more than a minute after boot before manually typing 'PMShell'.

Fix allowing looping sound

The hang can be avoided by removing the MMFix line from \config.sys; or by running '\Snap\GAOption VBE on' to turn off Snap video acceleration; or by switching to a different video driver such as Panorama. But then you may sometimes experience the looping startup sound bug.

Fix disabling desktop sound

If you use one of the above fixes that permit looping sound to occur, you can squash the looping sound bug by disabling Desktop sound effects entirely. OS/2 Warp 3 included DINSTSND.CMD and INSTSND.CMD in \MMOS2\install to toggle system sounds. My ECS lacks these but these simplified versions work:


/* DINSTSND.CMD */
Call RxFuncAdd 'mciRxDeinstMMSound','MMSND','mciRxDeInstMMSound'
rc=mciRxDeInstMMSound()
if rc=1 then say 'Now reboot.'; else say 'Error:' rc'.'
exit rc

/* INSTSND.CMD */
drive=translate(left(arg(1),1))
if drive <A | drive >Z then signal error
Call RxFuncAdd 'mciRxInstMMSound','MMSND','mciRxInstMMSound'
rc=mciRxInstMMSound(drive)
if rc=0 then say 'Now reboot.'; else say 'Error:' rc'.'
exit rc
error:
say; say 'You must specify the MMOS2 drive.'
exit 0

Fix delaying MMFix

Another workaround that keeps sound effects is to delay the start of the MMFix. Of course, there can be no assurance that the method described here will work for you.

  1. Place BOS2REXX.EXE from BootOS2.ZIP (available at Hobbes.NMSU.EDU) in a convenient directory (e.g. \Rube-Goldberg).
  2. Place Fix-MMFix.CMD (below) into the same directory.
  3. Specify that they run by including these lines in your \config.sys file:
    
    run=C:\Rube-Goldberg\BOS2Rexx.EXE
    run=C:\OS2\CMD.EXE /q /c "C:\Rube-Goldberg\Fix-MMFix.CMD >nul"
    

All this does is detach the script and let it check every two seconds to see if the PMShell is starting yet. If it is, the script launches MMFix.EXE and then terminates. Effectively, this is a patch for a patch, or a system hanging by a thread.


/* Fix-MMFix.CMD: Run MMFix Just In Time */
/*
Copyright walt.gregg.juneau.ak.us 2016.
License: apache.org/licenses/LICENSE-2.0.
No warranty, express or implied.
If booting to the command line so MMFix fails, adjust \config.sys lines.
Rem out MMFix.EXE and run MMFix.EXE and this Fix-MMFix.CMD lines thusly:
Rem run=C:\MMOS2\MMFix.EXE
run=C:\Rube-Goldberg\BOS2Rexx.EXE (from BootOS2.zip on hobbes.nmsu.edu);
run=C:\OS2\CMD.EXE /q /c "C:\Rube-Goldberg\Fix-MMFix.CMD >nul"

*/
call RxFuncAdd 'SysIni','RexxUtil','SysIni'
call RxFuncAdd 'SysSleep','RexxUtil','SysSleep'
'@echo off'
x=time('r')
do forever
  x=SysIni('USER', 'ALL:', 'stem.')
  if x\= 'ERROR:' then leave
  call SysSleep 2
end
/* Shell starting, run MMFix just in time */
'detach C:\MMOS2\MMFix.EXE 2>nul'
exit 0

📧 Send Comment Walt.Gregg.Juneau.AK.US/contact
🏡 Home Page Walt.Gregg.Juneau.AK.US
  Global Statistics   gs.statcounter.com