[Issue 3523] Fiber is not garbage collected properly

2012-10-16 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=3523



--- Comment #13 from d...@dawgfoto.de 2012-10-16 18:06:40 PDT ---
When the fiber is halted the Fiber object owns it's stack

This doesn't work out with our current GC mechanisms and the required stack
scans.

The other solution I can think of is to keep the inner stack free of any
references to the enclosing fiber. This would imply that all Fiber bookkeeping
must be done using asm or on the outer stack to fully avoid pointer leakage.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---


[Issue 3523] Fiber is not garbage collected properly

2012-10-09 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=3523


Alex R�nne Petersen a...@lycus.org changed:

   What|Removed |Added

 CC||a...@lycus.org


--- Comment #12 from Alex R�nne Petersen a...@lycus.org 2012-10-10 03:54:02 
CEST ---
What is the status of this today?

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---


[Issue 3523] Fiber is not garbage collected properly

2012-02-15 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=3523



--- Comment #10 from d...@dawgfoto.de 2012-02-15 04:15:06 PST ---
Hm... that's tricky.  The fiber implementation needs to hold a reference to the
fiber on its stack for context switching, and that's the reference that is
keeping the fiber alive.  I'll play with the stack pointers a bit and see if
things work if I exclude that reference from the GC scan.

It's simple to fix I think. Don't add the fiber context to the global context
list but GCscan all nested contexts instead. Now you only need to push/pop a
reference to the Fiber object for call/yield.
It's like swapping ownership. When the fiber is halted the Fiber object owns
it's stack, when the fiber is being executed the stack owns the Fiber object.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---


[Issue 3523] Fiber is not garbage collected properly

2012-02-15 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=3523



--- Comment #11 from Witold Baryluk bary...@smp.if.uj.edu.pl 2012-02-15 
08:09:20 PST ---
(In reply to comment #10)
 Hm... that's tricky.  The fiber implementation needs to hold a reference to 
 the
 fiber on its stack for context switching, and that's the reference that is
 keeping the fiber alive.  I'll play with the stack pointers a bit and see if
 things work if I exclude that reference from the GC scan.
 
 It's simple to fix I think. Don't add the fiber context to the global context
 list but GCscan all nested contexts instead. Now you only need to push/pop a
 reference to the Fiber object for call/yield.

Well I agree.

My reasoning is - if fiber is not currently executed and is not referenced by
anything from live set (all live threads, and all executing fibers, and all
threads and fibers referenced by them recursively), then there is no way to
resume execution of fiber (or terminate it manually, or change it), and it's GC
job to terminate and delete it.

 It's like swapping ownership. When the fiber is halted the Fiber object owns
 it's stack, when the fiber is being executed the stack owns the Fiber object.

It will probably introduce small additional overhead to Fiber context switching
and execution, but should not be much. I will be happy to test any fix which
resolves this problem.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---


[Issue 3523] Fiber is not garbage collected properly

2012-02-14 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=3523


d...@dawgfoto.de changed:

   What|Removed |Added

 CC||d...@dawgfoto.de


--- Comment #6 from d...@dawgfoto.de 2012-02-14 05:44:18 PST ---
I think this works now, doesn't it?

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---


[Issue 3523] Fiber is not garbage collected properly

2012-02-14 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=3523



--- Comment #7 from Witold Baryluk bary...@smp.if.uj.edu.pl 2012-02-14 
10:20:42 PST ---
(In reply to comment #6)
 I think this works now, doesn't it?

If you think so, I will test it shortly and report back.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---


[Issue 3523] Fiber is not garbage collected properly

2012-02-14 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=3523



--- Comment #8 from Witold Baryluk bary...@smp.if.uj.edu.pl 2012-02-14 
20:53:05 PST ---
Still same problem in 2.052. :(

Will check tomorrow 2.057, or 2.058 if it will be released.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---


[Issue 3523] Fiber is not garbage collected properly

2012-02-14 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=3523



--- Comment #9 from Witold Baryluk bary...@smp.if.uj.edu.pl 2012-02-14 
21:12:50 PST ---
(In reply to comment #8)
 Still same problem in 2.052. :(
 
 Will check tomorrow 2.057, or 2.058 if it will be released.

Well, it looks 2.058 is already available. I installed it (again 32-bit Linux),
and program leaks - it starts at about 14MB of virtual memory usage, 4MB or RAM
usage, and both grows about 1MB per second, after minute giving about 100MB,
and constantly growing.

So problem is still present.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---


[Issue 3523] Fiber is not garbage collected properly

2009-11-25 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=3523



--- Comment #5 from Witold Baryluk bary...@smp.if.uj.edu.pl 2009-11-25 
06:11:41 PST ---
Ok, i now i solved it using kind of hack:

/** This class is written because Fiber's are not correctly garbage collected
*/
class GenWrap(T : AGenerator, T2) {
private T x; /// T derives from AGenerator which derives from Fiber
public:
this(T x_) { x = x_; }
~this() { delete x; }
T2 getNext() { return x.getNext(); }
T o() { return x; } // don't assign return value to any variable which can
live longer than this object
}

This is hack, because it can destroy Fibers which are still referenced
somewhere. So All my direct usages of variables of type T, must be changed to
use GenWrap.o(), to be sure that delete x inside destructor is safe.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---


[Issue 3523] Fiber is not garbage collected properly

2009-11-24 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=3523



--- Comment #3 from Witold Baryluk bary...@smp.if.uj.edu.pl 2009-11-24 
16:05:22 PST ---
I solved my problem by changin one of my base clases from:

abstract class AGenerator : Fiber {
protected:
this(void delegate() dg) {
super(dg);
}
}


To:
abstract class AGenerator {
private:
Fiber x;

protected:
this(void delegate() dg) {
x = new Fiber(dg);
}
~this() {
delete x;
}
public:
void call() {
x.call();
}
void yield() {
x.yield();
}
Fiber.State state() {
return x.state;
}
}

And it magically started working correctly (Fibers are properly destroyed).

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---


[Issue 3523] Fiber is not garbage collected properly

2009-11-19 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=3523


Sean Kelly s...@invisibleduck.org changed:

   What|Removed |Added

 Status|NEW |ASSIGNED


--- Comment #2 from Sean Kelly s...@invisibleduck.org 2009-11-19 07:28:26 PST 
---
Hm... that's tricky.  The fiber implementation needs to hold a reference to the
fiber on its stack for context switching, and that's the reference that is
keeping the fiber alive.  I'll play with the stack pointers a bit and see if
things work if I exclude that reference from the GC scan.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---


[Issue 3523] Fiber is not garbage collected properly

2009-11-18 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=3523



--- Comment #1 from Witold Baryluk bary...@smp.if.uj.edu.pl 2009-11-18 
19:56:25 PST ---
If one will not call derived.call() (so leaving Fiber in TERM state, and never
running it at all) it will be properly collected.

Adding after derived.call(), a derived.reset() to make it back to TERM state,
doesn't help (still it is not collected).

Adding second derived.call(), after first one, will make collect() to work
correctly.

So i can assume it run() method terminates correctly and underlaying stack is
destroyed, object is properly destructed in colletion phase.

Essentially my problem is because my Fibers doesn't terminate at all they
yield infinitly (saving some auxilary data in fields of some objects, so this
data can be used outside of yield, essentiall in thread which called call), but
i want to terminate them automatically (when they are not referenced by any
thread or other Fiber) if needed.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---