To see the bugs I've squashed in the past few days please look here:
http://github.com/davidiw/brunet/commits/7d433f966ab243f3dce899b0267be1799971addc
Some bugs that remain:
- Nodes that use FunctionEdgeListener will not allow unclosed edges to
be garbage collected, see this
http://github.com/davidiw/brunet/commit/7d433f966ab243f3dce899b0267be1799971addc
- Node.Abort will not allow the node to be garbage collected ... Most
likely due, though not limited, to this logic:
http://github.com/davidiw/brunet/blob/7d433f966ab243f3dce899b0267be1799971addc/src/protocol/Node.cs#L729
I don't envision any of the bugs being too bad for existing systems, but
I strongly recommend you upgrade regardless.
Also note, that due to a change in queue size max:
http://github.com/davidiw/brunet/blob/7d433f966ab243f3dce899b0267be1799971addc/src/protocol/Node.cs#L341
Memory may swell on planetlab before the node is restarted, I
hypothesize the node may get up to 80 MB before restarting.
In the future, I am working on a "HeavyChurnSimulator" that I think
would have revealed most of these problems. I'll wrap it up in the near
future and I'd like to recommend it be used as the pre-planetlab defacto
standard for ensuring there are no leaks.
Also I'd like to recommend that individuals consider using Visual Studio
when debugging, it helped speed up this process significantly.
Especially since the mono tools have trouble keeping up with our
system. For example, I tried doing a "heap-shot" with Mono and before I
even executed my first "heap-shot" I was already storing 4 GB of
application profile data. Maybe I messed something up, but I
reattempted this many, many times. Also to relate to a conversation, I
had with Pierre regarding my "conversion" or rather usage of Visual
Studio. As a student who has many tasks, I sadly don't have enough time
to improve Mono. Forcing myself to debug and profile with it in lieu of
MS VS hinders my productivity. It is my experience that the MS
Debuggers and Profilers tend to be of a higher quality than Mono. Alas
if I had time (and desire), I would gladly work on improving Mono.
I'll be releasing updated GroupVPN binaries and GridAppliances.
Actually the former is already done, I will announce it in another
e-mail though.
I need sleep :).
Regards,
David
One question about this patch:
http://github.com/davidiw/brunet/commit/51eed5be4386f3cbc3014e0736ada7b90ebeb597
That line of code *was* in there before (I think). It was removed for
simplicity due to this:
http://msdn.microsoft.com/en-us/library/b1yfkh5e.aspx
which says that IDisposable objects should call Dispose in their
destructor. So, if no one ever calls the Close() method of the
LFBlockingQueue, when the object goes out of scope, _are's destructor
will be called, which will call Dispose().
I'm not sure I see the advantage of calling it in our destructor. Can
you explain that one a little more?
Best,
Regards,
David