Permalink
Commits on Feb 5, 2011
  1. Another bug with the loader script

    laverdet committed Feb 5, 2011
    Clowntown.
  2. Fix syntax error in fibers.js

    laverdet committed Feb 5, 2011
    Whoops, how did this get in there? I swear I tested..
Commits on Feb 3, 2011
  1. Fix node v0.2.x compatibility

    laverdet committed Feb 3, 2011
    require.resolve is a new feature. v0.3.x is going stable soon, after
    which support for v0.2.x will dwindle. This also fixes 32-bit building
    on some platforms.
    
    Closes gh-7
Commits on Jan 25, 2011
  1. Remove boost dependency

    laverdet committed Jan 25, 2011
    Sometimes I forget that non-developers don't have boost installed... so
    to lower the friction of installation for the first time I'm removing
    boost since it's used in one place only anyway.
Commits on Jan 24, 2011
  1. Package tweaks

    laverdet committed Jan 24, 2011
    Detect on load when the fibers library is older than node, which
    probably means your build is out date. Also fix it so that `npm rebuild
    fibers` works.
  2. Don't segfault while calling yield with no fiber

    laverdet committed Jan 24, 2011
    require('fibers');
    yield();
    
    Dereferencing uninitialized pointers is generally bad.
Commits on Jan 23, 2011
  1. Fix behavior of child processes

    laverdet committed Jan 23, 2011
    Child processes were getting the LD_PRELOAD carried over from node which
    is probably undesirable. Now when coroutine.so loads it nulls out those
    environment variables. Since it's loaded already they don't need to be
    around.
    
    Also fix a related linking error.
  2. npm package

    laverdet committed Jan 23, 2011
    This fixes the build and adds an npm package. I had to add
    LD_LIBRARY_PATH to fiber-shim because it fails to load if coroutine.so
    is not in your current working directory. This also uses a better
    heuristic for determining if fiber-shim was used.
    
    Also the library is now just called `fibers` when used in the context of
    node.
  3. New directory structure

    laverdet committed Jan 23, 2011
    Moving source files into `bin` and `src`. Also renaming "node-fibers.cc"
    to just "fibers.cc". This breaks the Makefile so don't try to make while
    you have this revision checked out.
Commits on Jan 22, 2011
  1. Prevent abort trap on exit

    laverdet committed Jan 22, 2011
    When running a debug version of v8 and your application terminates while
    there are still yielding fibers there's an abort trap that gets caught
    and a scary error message. v8 is trying to cleanup resources while
    node-fibers.cc is getting unloaded and it's all-around bad news. This
    quick and dirty hack prevents v8 from cleaning up, which actually
    doesn't make a huge difference since the application is terminating
    anyway.
  2. Documentation and other inconsequential changes

    laverdet committed Jan 22, 2011
    This just adds some more examples to the readme, makes Loader a totally
    self-contained class, and fixes the shebang in fiber-shim.
  3. Fix reset() + unwinding double yield() segfault

    laverdet committed Jan 22, 2011
    Not only was reset() just pointing to run(), there were problems in
    UnwindStack() which would make it seg fault in some cases. We were
    reusing `yielded` to store the exception thrown for zombified fibers,
    but that gets disposed aggressively (and rightfully so!) which leads to
    us returning a disposed pointer in the case where you re-call yield()
    from an unwinding fiber. And then in some cases v8 decided to
    garbage collect it already and that's when the fun stops.
  4. README update

    laverdet committed Jan 22, 2011
    Now with more markdown!
Commits on Jan 20, 2011
  1. Catch illegal `this` invocations

    laverdet committed Jan 20, 2011
    If you called any of the native methods with an unexpected `this`
    argument it would just fail an assertion at best, or continue with some
    other object at worst. This adds an instance check that you can't fake
    in plain Javascript to avoid those issues. Now Unwrap will throw to the
    calling code if there's a problem.
  2. Better stack unwinding support

    laverdet committed Jan 20, 2011
    This adds two new methods reset(), and throwInto(). Both will throw
    exceptions into a yielding fiber, however reset() will take care of
    catching the thrown exception and gracefully returning. throwInto() will
    likely throw your exception right back out.
    
    reset() can be used in cases where infinite loop generators are used
    extensively. Leaving destruction of those fibers to v8 is generally
    inefficient. throwInto() could be used to notify a fiber that you don't
    care about its task anymore.
    
    This also defers unwinding of orphaned fibers until after garbage
    collection has finished. This greatly increases the speed at which
    orphaned fibers are collected.
Commits on Jan 19, 2011
  1. Coroutine recycling

    laverdet committed Jan 19, 2011
    Instantiating new coroutines is quite expensive. Between allocating a
    new stack, getcontext(), and makecontext() we spend a good amount of
    time redoing work. The stack allocation cost is mitigated a little bit
    with the pool allocator, however it can't beat full object recylcing.
    
    This implements a pool of finished coroutines which are then reset and
    then returned again via `create_fiber`.
Commits on Jan 18, 2011
  1. pthread_key destructor support

    laverdet committed Jan 18, 2011
    The shim on top of pthreads did not correctly support destructors, so I
    went ahead and added that, so that when fibers are deleted the memory
    applications reserved for them is freed up correctly.
  2. More memory correctness

    laverdet committed Jan 18, 2011
    I was using auto_ptr<char> with new[] which is incorrect. So I switched
    to a vector to manage the stack, but it seems that performance took a
    hit here. That should be solved with pooling though.
Commits on Jan 17, 2011
  1. Greatly improved memory management

    laverdet committed Jan 17, 2011
    There were a lot of problems with garbage collection before,
    particularly with infinite loop generators. The problem is that the
    handle to the fiber was always held in a deadlock, since we pass it as
    the `this` context to the Fiber entry. So now `yield()` is a global,
    to avoid this problem.
    
    Additionally we are now giving v8 proper hints for externally-allocated
    memory, so it can handle garbage collection better. Also the coroutine
    library can free finished coroutines correctly now.
    
    Incidentally, node-fibers doesn't use any node-specific API's anymore;
    if you change the node.h include to be v8.h, it will still compile and
    run just fine.
  2. Don't remake all the time

    laverdet committed Jan 17, 2011
    Had a rule which could never be verified which was causing
    node-fibers.node to be rebuilt everytime.
Commits on Jan 16, 2011
  1. Adding .gitignore

    laverdet committed Jan 16, 2011
    Cleaning up `git status`.
  2. Linux, 32-bit, and node v0.2.x support

    laverdet committed Jan 16, 2011
    Added support for linux and 32-bit builds via makefile madness. I should
    probably be using waf, but I don't really care about learning that, so
    here we are. Also it was only a 2-line change to fix support for earlier
    versions of node, so why not?
  3. Initial commit

    laverdet committed Jan 16, 2011