Re: A Very Troubled Application...
Adam Tuliper <[email protected]> Wed, 10 Jun 2009 13:29:27 -0400
| Newsgroups | gmane.comp.windows.devel.dotnet.advanced |
|---|---|
| Message-ID | <[email protected]> |
Mike, this is indeed a component, and not a standalone application? if so did you try the ThreadException as Peter mentioned? On Wed, Jun 10, 2009 at 1:26 PM, Mike Andrews <[email protected]>wrote: > Yes, I'd be curious as well as to how the system cleans up after a fault. > I > know yesterday when I intentionally caused the app to crash numerous times > my system (Windows XP Pro) became unstable in that Explorer would just > randomly "hang" and not let you utilize the task bar; it was ridiculous. > > I have a similar situation that I'm working on where instead of using Word > I'm using some other 3rd party app that behaves very poorly but the issue > is > moot since I must use it and must adapt it to be a "server" > non-user-monitored application. I'm well on my way to it and I've done a > majority of the work but solving cases where the application just fails is > a > very difficult endeavor. > > On Wed, Jun 10, 2009 at 11:22 AM, Adam Tuliper <[email protected] > >wrote: > > > we had to do the same hacks for word.. using it as server side doc > > generation before good pdf components were available to us and I recall > > word > > would fail after a while. that goodness we've come a long way : ) > > > > For dlls being cleaned at termination time.. library code segments are > > shared between processes (that reference the same lib). So there is only > > one > > code section in memory (unless specifically designated otherwise I > > believe). > > When LoadLibrary is called, ref count is incremented. So when a process > > crashes.. how does the system know what to decrement counts for? I don't > > believe it does.. and hence a potential memory issue with crashed > > appliations leaving resources around. If I'm not 100% correct on this.. > I > > would like to know a reference to how the system cleans up.. Id be > curious > > of the inner workings, this is all from rusty memory. > > > > > > > > > > > > On Wed, Jun 10, 2009 at 2:01 AM, Peter vd Weerd <[email protected]> > wrote: > > > > > When windows terminates a process, all system-resources are cleaned up. > > > Dll's too. They are loaded in the virtual address space, and the > address > > > space is removed at termination. > > > Reference counting on dll's is only within a process. AFAIK there is no > > > system-wide refcnt. > > > > > > Dll's are loaded by creating a named filemapping to this dll. This > > mapping > > > is a normal system resource and will be freed at termination time. > > > > > > Out of process COM objects are a different story. The process where > this > > > COM-object lives has nothing to do with the hosting process (as far as > > the > > > system knowns). And it is refcnted. > > > > > > So if the host process is getting terminated, the only way for the COM > > > process to get auto terminated is to do a watchdog check on its host if > > its > > > still alive. There are some watchdog checks in the standard marshalling > > code > > > (hartbeats), but I'm not sure if they are used for terminating the > > process > > > with the COM object. Another question is how big the timeout for this > > > watchdog is. So may be you want to restart the COM object before the > > > watchdog timed out. > > > > > > I used my proposed solution (restarting the process after failure) a > few > > > times in case of untrusted applications, and it worked fine. I can > > remember > > > problems with MSWord (out of process COM) years ago. After failure (the > > > process using MSWord died) I killed the MSWord instance too and than > > > restarted my application. Ugly, but it worked. > > > I had more problems there, because word was not designed as a service. > > Its > > > a UI, so it will popup a dialog every now and than. I had to 'answer' > > those > > > dialogs too :-) > > > > > > /Peter > > > ----- Original Message ----- From: "Adam Tuliper" < > > [email protected]> > > > To: <[email protected]> > > > Sent: Tuesday, June 09, 2009 10:30 PM > > > Subject: Re: [ADVANCED-DOTNET] A Very Troubled Application... > > > > > > > > > > > > I seem to recall the opposite was true.. Windows isn't very good about > > >> cleaning up resources (at least in the past) because of the way > > libraries > > >> dont get freed because the reference count handling is never > executed.. > > >> something along those lines. Although if someone can provide some more > > >> technical reference on if this is true or not.. Id love to read it. > > >> > > >> > > >> > > >> On Tue, Jun 9, 2009 at 1:00 PM, Peter vd Weerd <[email protected]> > > wrote: > > >> > > >> Mike, > > >>> > > >>> In general: if you have access violations caused by COM-components, > its > > >>> not > > >>> a good idea to recover from that. > > >>> If you can isolate the complete application to a kind of a > > >>> worker-process, > > >>> you write a controller-program that starts this worker-process, and > if > > it > > >>> fails, just start a new one. > > >>> > > >>> Windows is very good in recovering from crashed processes: all > > resources > > >>> are freed. So, when the controller process fires up a new > > worker-process > > >>> its > > >>> a brand new one with clean memory, a clean .NET virtual machine, etc. > > >>> > > >>> /Peter > > >>> > > >>> > > >>> ----- Original Message ----- From: "Mike Andrews" < > > >>> [email protected]> > > >>> To: <[email protected]> > > >>> Sent: Tuesday, June 09, 2009 6:06 PM > > >>> Subject: [ADVANCED-DOTNET] A Very Troubled Application... > > >>> > > >>> > > >>> > > >>> I have a very troubled application (not mine but a 3rd party) that > > likes > > >>> to > > >>> > > >>>> fail with various Unhandled exceptions (memory access and others) > when > > >>>> certain files are loaded (I have no idea of the reason). Sometimes > > >>>> loading > > >>>> a file causes a COM exception to occur (no one knows why and it's > very > > >>>> unlikely that the manufacturer will ever fix it). This causes the > > >>>> entire > > >>>> application to crash (and/or provide some other unpredictable > > behavior). > > >>>> This does not occur most of the time but only occasionally. However > I > > >>>> must > > >>>> account for these eventualities as this process will be running on > > >>>> multiple > > >>>> servers and I need it the most stable I can get it. > > >>>> > > >>>> What I have been doing is looking for the process in the process > list > > >>>> and > > >>>> then killing it. That works most of the time but when one of those > > >>>> dialogs > > >>>> is thrown up asking you to click OK it really messes things up. > I've > > >>>> started looking for the dialog, but the time when the dialog appears > > >>>> varies > > >>>> so any predictability is out. > > >>>> > > >>>> What I need to know is if it's possible to attach a hook (or some > > other > > >>>> such > > >>>> mechanism) to the window to intercept any unhandled win32 exceptions > > >>>> similar > > >>>> to the capability available in the .NET framework. I'm at my wit's > > end > > >>>> here > > >>>> on this one. I need to create something stable enough so I can > > recover > > >>>> on > > >>>> the server and continue. > > >>>> > > >>>> Any help or information would be most appreciated. > > >>>> > > >>>> Thanks, > > >>>> Mike > > >>>> > > >>>> =================================== > > >>>> View archives and manage your subscription(s) at > > >>>> http://peach.ease.lsoft.com/archives > > >>>> > > >>>> > > >>>> =================================== > > >>> View archives and manage your subscription(s) at > > >>> http://peach.ease.lsoft.com/archives > > >>> > > >>> > > >> =================================== > > >> View archives and manage your subscription(s) at > > >> http://peach.ease.lsoft.com/archives > > >> > > >> > > > =================================== > > > View archives and manage your subscription(s) at > > > http://peach.ease.lsoft.com/archives > > > > > > > =================================== > > View archives and manage your subscription(s) at > > http://peach.ease.lsoft.com/archives > > > > =================================== > View archives and manage your subscription(s) at > http://peach.ease.lsoft.com/archives > =================================== View archives and manage your subscription(s) at http://peach.ease.lsoft.com/archives