papaspud said:
I have a custom built computer (built it myself) and am running XP Pro on
a 1.7G Celeron. When I first start my computer everything goes well, but
if I leave it on for a while the icon that represents my printer in the
system tray changes from a red diamond to a red X and the printer will no
longer function. It is connected through a USB port and I have spoken
with Lexmark several times. They had me try several things including
disabling the USB ports from powering off when the computer is in wait
mode (not sleep). Sometimes I can disconnect the power cord from the
printer, wait a minute and plug it back in and the problem will correct
itself but this usually doesn't work. In addition, just as often as the
previous problem, the spoolsv.exe program uses 99% of my system resources
and I have to shut it down to have my computer operate well. Can anyone
help me?
Problem: The LexMark X125 printer driver hangs after about 12-48 hours of
idle time. If you look at the LexMark icon on the system tray you see a red
"X" symbol.
Workaround: The way to recover is to kill type Ctrl-Alt-Del, find the
process LEX125SU and kill it. Then stop and re-start the Print Spooler
service (NET STOP "Print Spooler"; NET START "Print Spooler"). Then re-run
"\Program Files\...\Lexmark X125\LEX125SU.EXE". Reboot also works.
I wrote a batch script to do this using the PSKILL and PSSERVICE
command-line utilities from
www.sysinternals.com.
Cause: The LEX125SU.EXE program has a resource leak. It leaks Win32 object
handles when left idle. It happens on XP, W2K, and W2K3. Eventually all
handles are exhausted and you see the red "X" in the system tray for the
Lexmark X125 icon.
LEX125SU is leaking a Win32 object called a "metered section". A metered
section is a like a critical section except it works across processes and is
able to count the number of times the critical section was entered.
You can see the leak if you run Process Explorer from SysInternals
(
www.sysinternals.com). Click on LEX125SU.EXE and you will see hundreds of
object handles open with the names
\BaseNamedObjects\DKC_MSECT_EVT_OAcriticalTrans and
\BaseNamedObjects\DKC_MSECT_MMF_OAcriticalTrans. The number of open handles
grows until eventually too many handles are opened. Then when you try to
print it tries to open a named pipe to the print spooler but fails with
ERROR_TOO_MANY_OPEN_FILES. At that point the printer is effectively dead.
This is a very simple bug for the driver developers at LexMark to fix.
If I had the time (which I don't) I could apply a runtime patch to intercept
CreateMeteredSection() and redirect to a stub that caches and recycles an
already open handle.
This is *not* a Microsoft software bug, nor a hardware problem. It is a
LexMark driver bug.
Regards,
Alan Klietz
Algin Technology (
www.algintech.com)