View Single Post
  #3 (permalink)  
Old 02-15-2008, 07:10 AM
sid
Newsgroup Contributor
 
Posts: n/a
Re: Garbage Collector Trauma

On 15 Feb, 13:43, "<ctacke/>" <ctacke[at]opennetcf[dot]com> wrote:
> Are you saying a thread in the *native* DLL is getting suspended? *If so
> then that's not possible as the GC knows nothing about the threads and
> cannot and will not affect them. *THis sounds a lot more like a pinning
> problem to me. *Like your native thread is using some data from the managed
> app and when GC happens that managed data is getting moved during a
> compaction (which doesn't happen with every GC and would explain why it
> doesn't happen when you manually call collect). *With what little info we
> have so far, my bet is you're passing in a variable that is getting used in
> the native DLL - probably being sent by reference - that you're not pinning.
>
> --
>
> Chris Tacke, Embedded MVP
> OpenNETCF Consulting
> Giving back to the embedded communityhttp://community.OpenNETCF.com
>
> "sid" <mail...******.com> wrote in message
>
> news:25261b1a-081c-4e1a-aefc-43eb9ef4373e@d4g2000prg.googlegroups.com...
>
>
>
> > Hi

>
> > I have an application written in VB.NET for windows mobile 2005
> > device. In addition I have 2 unmanaged DLL's written in C which the VB
> > app uses.

>
> > The app runs absolutely fine until the system garbage collector gets
> > triggered, at which point one of my DLL's (in which I create a
> > separate thread for some sound recording task) thread gets suspended
> > and never gets up after that. At this point my application just stops
> > working.

>
> > Is there any way I can mark my THREAD as GC-SAFE so that GC just
> > bypasses it during its sweep operations.

>
> > The intriguiing part is, if I manually trigger the GC with the
> > following lines (executing these lines quite regularly)

>
> > GC.Collect()
> > GC.WaitForPendingFinalizers()
> > GC.Collect()

>
> > then it seems to be working fine, even when the GC is virtually always
> > on.

>
> > Anyone has any say on this please advise as I am not convinced with
> > calling the GC commands from within the application.

>
> > Cheers
> > Sid- Hide quoted text -

>
> - Show quoted text -


Yes I am sending a few variables from the VB.NET to the C-DLL through
DLL function calls. But all of them seem to be going ByVal. Are
strings sent ByRef even if you send it ByVal. There are only two
variables I send ByRef, but I suspect the problem is with them. I am
still in the process of checking it..
Reply With Quote

 
Old 02-15-2008, 07:10 AM