Git Product home page Git Product logo

Comments (10)

laverdet avatar laverdet commented on July 18, 2024

Hmm.. I can't think of when that would happen. I would have to toy with it for a bit.. Can you distill this case into something you could send me so I could observe it on my system?

from node-fibers.

ybogdanov avatar ybogdanov commented on July 18, 2024

No :(
I cannot reproduce it outside of my app business-logic. Think, the bug somewhere in my Sync.async(), but I don't even guess why it may happen.
If you'll explain me a bit more about this assertion, I will try to distill it.

from node-fibers.

laverdet avatar laverdet commented on July 18, 2024

This error would get thrown if you have more fibers active than MAX_POOL_SIZE (120) and two of them finish in an abnormal way. If you want to make this easier to test I'd recommend changing "MAX_POOL_SIZE" to 0 in src/coroutine.cc. The assert you're seeing will only get run if more than 120 fibers return in row. By changing it to 0 you can begin testing without needing a lot of circumstance.

from node-fibers.

ybogdanov avatar ybogdanov commented on July 18, 2024

Ah, great, got it on single request. Digging.

from node-fibers.

ybogdanov avatar ybogdanov commented on July 18, 2024

Ok, got it:
require('fibers');

var async = function(fn, callback) {
    Fiber(function(){
        callback(null, true)
    }).run();
}

Fiber(function(){
    async(function(err, result){
        console.log(result)
    });
}).run()

-->
Assertion failed: (delete_me == NULL), function fiber_did_finish, file coroutine.cc, line 112.
/Users/octave/bin/node-fibers: line 34: 2939 Abort trap FIBER_SHIM=1 DYLD_INSERT_LIBRARIES="$FIBERS_ROOT/coroutine.dylib" DYLD_FORCE_FLAT_NAMESPACE=1 DYLD_LIBRARY_PATH="$FIBERS_ROOT" $NODE "$@"
but
require('fibers');

var async = function(callback) {
    Fiber(function(){
        var fiber = Fiber.current;
        process.nextTick(function(){
            fiber.run();
        })
        yield();
        callback(null, true);
    }).run();
}

Fiber(function(){
    async(function(err, result){
        console.log(result)
    });
}).run()

-->
true

from node-fibers.

laverdet avatar laverdet commented on July 18, 2024

Ah great thanks! It seems that without pooling enabled fibers break down quite easily..

require('fibers');
Fiber(function() {
  Fiber(function() {}).run();
}).run();

I should be able to fix this for you soon.

from node-fibers.

ybogdanov avatar ybogdanov commented on July 18, 2024

Thanks in advance!

from node-fibers.

laverdet avatar laverdet commented on July 18, 2024

Fix failure when multiple fibers finish together

If multiple fibers finished one after in an unexpected way there would
be a memory leak because delete_me would get overwritten. There was an
assertion in place to prevent this scenario, and a case was discovered
which triggers this condition. It was actually quite hard to hit because
the coroutine pool masks this issue very well. The issue was fixed by
deleting dead coroutines as soon as possible, instead of at the next
call to run()

Closed by de187c9

from node-fibers.

ybogdanov avatar ybogdanov commented on July 18, 2024

Great!
The error was gone. Benchmark succeed.

Thank you!

from node-fibers.

laverdet avatar laverdet commented on July 18, 2024

Good to hear :)

from node-fibers.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.