Re: [Mono-dev] WeakReference problem

2014-01-30 Thread Rodrigo Kumpera
You're right, mono only returns false if the WR has been finalized. Thanks
for taking the
time to find a way to reproduce the issue. I just fixed it on master.


On Thu, Jan 30, 2014 at 12:56 PM, Tobias Käs  wrote:

>  While trying to write a minimal test case I realized that mono actually
> never (?) returns false from WeakReference.TryGetTarget when the object has
> been collected, so this is pretty easy to reproduce and totally
> deterministic.
>
>
> using System;
> using System.Threading;
>
> static class Program {
> static WeakReference wr;
>
> static void Main(string[] args) {
> Allocate();
> GC.Collect();
> GC.WaitForPendingFinalizers();
> GC.Collect();
> Check();
> }
>
> static void Allocate() {
> wr = new WeakReference(new object());
> }
>
> static void Check() {
> object obj;
> if(wr.TryGetTarget(out obj) && obj == null) {
> throw new ApplicationException("assertion failed:
> object has been collected but TryGetTarget returned true");
> }
> }
> }
>
>
> Am 29.01.2014 23:41, schrieb Rodrigo Kumpera:
>
> Please provide a test case that shows this behavior
>
>
> On Wed, Jan 29, 2014 at 5:00 PM, Tobias Käs  wrote:
>
>> Hi, the generic WeakReference for .NET 4.5 sometimes returns true from
>> TryGetTarget even though the target has been collected (the out-value is
>> correctly set to null). All my WeakReferences have been initialized with
>> non-null values.
>>
>> Looking at the source at github I can imagine that there is a race
>> between the handle.IsAllocated check and the handle.Target retrieval, but
>> I'm no expert. Should I file a bug on that one? I'm not sure what the
>> expected behavior is since MSDN documentation of that method isn't so
>> great, but if the caller has to check the out-value against null anyways,
>> then the return value becomes kinda pointless in my opinion.
>>
>> Regards,
>> Tobias
>> ___
>> Mono-devel-list mailing list
>> Mono-devel-list@lists.ximian.com
>> http://lists.ximian.com/mailman/listinfo/mono-devel-list
>>
>
>
>
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] WeakReference problem

2014-01-30 Thread Tobias Käs
While trying to write a minimal test case I realized that mono actually 
never (?) returns false from WeakReference.TryGetTarget when the object 
has been collected, so this is pretty easy to reproduce and totally 
deterministic.



using System;
using System.Threading;

static class Program {
static WeakReference wr;

static void Main(string[] args) {
Allocate();
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
Check();
}

static void Allocate() {
wr = new WeakReference(new object());
}

static void Check() {
object obj;
if(wr.TryGetTarget(out obj) && obj == null) {
throw new ApplicationException("assertion 
failed: object has been collected but TryGetTarget returned true");

}
}
}


Am 29.01.2014 23:41, schrieb Rodrigo Kumpera:

Please provide a test case that shows this behavior


On Wed, Jan 29, 2014 at 5:00 PM, Tobias Käs > wrote:


Hi, the generic WeakReference for .NET 4.5 sometimes returns
true from TryGetTarget even though the target has been collected
(the out-value is correctly set to null). All my WeakReferences
have been initialized with non-null values.

Looking at the source at github I can imagine that there is a race
between the handle.IsAllocated check and the handle.Target
retrieval, but I'm no expert. Should I file a bug on that one? I'm
not sure what the expected behavior is since MSDN documentation of
that method isn't so great, but if the caller has to check the
out-value against null anyways, then the return value becomes
kinda pointless in my opinion.

Regards,
Tobias
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com

http://lists.ximian.com/mailman/listinfo/mono-devel-list




___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list