Jump to content
Xtreme .Net Talk

Recommended Posts

Posted

I have been fighting with this part of the code for a long time trying to figure out what is wrong with it. It is saying that the file is being used by another process( on line 197 ). As you can see from the code, the method that is giving me an error is a synchronized method so that only one thread can enter it at any time. I am even closing the streamwriter when I am done writing. Another wierd thing is in some threads, I am getting an error saying that the file represented by 'permlogfilepath' already exists even though I am performaing a check that if that file exists, process it differently!! Any suggestions?

 

I have also tried debugging the code but I was not successfull in finding what process is locking it. Any other way to find out?

 

Thanks

SJ

  • Administrators
Posted

Are you opening the same filename anywhere else in you code and failing to close it? A good tool for finding what files are open is FileMon from http://www.sysinternals.com.

 

Also could you avoid posting large screenshots unnecessarily as some people access this site from dialup connections and a 90K attachment is a little large when the text could have been cut and pasted for less than a couple of K.

Posting Guidelines FAQ Post Formatting

 

Intellectuals solve problems; geniuses prevent them.

-- Albert Einstein

Posted

I am pretty sure that I am not opening the file anywhere else. The only reason I was able to think of is the first thread that is opening the file may not be closing it. But I am programmatically closing it.

 

And about the screenshot, I usually paste the code but I wanted everyone to know the line number that I am talking about and be able to read the code clearly. Anyway, thanks for the suggestion.

 

SJ

  • Administrators
Posted

Hmmm, been looking into this a bit more and all I've discovered is I'm not sure what the


is supposed to do :confused:

Although i did hit a few pages that seemed to suggest avoiding it and implementing the locking yourself.

 

If you look at the ildasm output for a method with that attribute it decoreates the function but doesn't provide any explicit locing code :confused: (again)

 

looking at the following class

Friend Class Class1

Private objLock As Object = New Object

 _
  Protected Sub Test1(ByVal i As Integer)
	i = i + 3
End Sub

Protected Sub Test2(ByVal i As Integer)
	System.Threading.Monitor.Enter(objLock)
	i = i + 3
	System.Threading.Monitor.Exit(objLock)
End Sub

End Class

 

Test1 produces the following MSIL

.method family instance void  Test1(int32 i) cil managed synchronized
{
 // Code size       6 (0x6)
 .maxstack  8
 IL_0000:  ldarg.1
 IL_0001:  ldc.i4.3
 IL_0002:  add.ovf
 IL_0003:  starg.s    i
 IL_0005:  ret
} // end of method Class1::Test1

 

and Test2 produces this

.method family instance void  Test2(int32 i) cil managed
{
 // Code size       38 (0x26)
 .maxstack  8
 IL_0000:  ldarg.0
 IL_0001:  ldfld      object VB_WinApp_2.Class1::objLock
 IL_0006:  call       object [mscorlib]System.Runtime.CompilerServices.RuntimeHelpers::GetObjectValue(object)
 IL_000b:  call       void [mscorlib]System.Threading.Monitor::Enter(object)
 IL_0010:  ldarg.1
 IL_0011:  ldc.i4.3
 IL_0012:  add.ovf
 IL_0013:  starg.s    i
 IL_0015:  ldarg.0
 IL_0016:  ldfld      object VB_WinApp_2.Class1::objLock
 IL_001b:  call       object [mscorlib]System.Runtime.CompilerServices.RuntimeHelpers::GetObjectValue(object)
 IL_0020:  call       void [mscorlib]System.Threading.Monitor::Exit(object)
 IL_0025:  ret
} // end of method Class1::Test2

 

although Test1 is much shorter the only thing it seems to do is decorate the function with the 'synchronized' attribute.

 

It may be worth removing the attribute and implementing your own locking code (similar to the stuff in Test2) if for no other reason than to see if that fixes the problem. I have a feeling this will bug me for a while so if it solves the problem could you let me know? :)

Posting Guidelines FAQ Post Formatting

 

Intellectuals solve problems; geniuses prevent them.

-- Albert Einstein

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...