Closed natevw closed 12 years ago
No guarantee that you will be able to get it working in 0.5.*, because of API changes, but try adding process.env['NODE_PATH'] += ':' + __dirname + "/../lib";
to the test.js file.
Still get the same internal V8 assertion error. I don't think it's related at all to paths, sorry for bringing that into the ticket if it caused confusion. The bug I am seeing is (with both the test suite and my own library that uses node-proxy) is that it crashes on a V8 call:
FATAL ERROR: v8::HandleScope::Close() Local scope has already been closed
It builds fine:
BUILDING: C++ Component
Checking for program g++ or c++ : /usr/bin/g++
Checking for program cpp : /usr/bin/cpp
Checking for program ar : /usr/bin/ar
Checking for program ranlib : /usr/bin/ranlib
Checking for g++ : ok
Checking for node path : ok /usr/local/lib/node
Checking for node prefix : ok /usr/local/Cellar/node/0.4.11
'configure' finished successfully (0.032s)
Waf: Entering directory `/Users/nathan/Development/Others'/node-proxy/src/build'
[1/2] cxx: node-proxy.cc -> build/default/node-proxy_1.o
[2/2] cxx_link: build/default/node-proxy_1.o -> build/default/node-proxy.node
Waf: Leaving directory `/Users/nathan/Development/Others'/node-proxy/src/build'
'build' finished successfully (0.449s)
but (now testing with node-0.5.5), it segfaults halfway through the tests:
node-proxy nathan$ /tmp/node-v0.5.5/node test/test.js
Running tests...
1: Base Proxy methods
Proxy.create: PASS
Proxy.createFunction: PASS
Proxy.createFunction with optional constructor trap: PASS
Proxy.isTrapping on proxy object: PASS
2: Testing proxy function instance
proxy function is callable: PASS
proxy function has accessible properties: PASS
proxy function get properties: PASS
proxy function as constructor: PASS
proxy function instance property handling: PASS
3: Testing proxy object instance
has property 'first': PASS
get property 'first': PASS
set property 'first' to new value: PASS
set new property 'second': PASS
has new property 'second': PASS
get newly set property 'second': PASS
iterate property names: PASS
Object.getOwnPropertyNames on proxy object: PASS
Object.getOwnPropertyNames returned an Array: PASS
Object.getOwnPropertyNames return value has the correct length: PASS
Object.getOwnPropertyNames has the correct values: PASS
Object.keys on proxy object: PASS
Object.keys returned an Array: PASS
Object.keys return value has the correct length: PASS
Object.keys has the correct values: PASS
delete 'second': PASS
proxy instance no longer has property 'second': PASS
4: Fundamental traps
PropertyDescriptor context for get should be the receiver: PASS
PropertyDescriptor context for set should be the receiver: PASS
PropertyDescriptor should get value if get method is not supplied: PASS
PropertyDescriptor should set value if set method is not supplied: PASS
5: Derived traps
proxy context should be the PropertyHandler for derived trap 'get': PASS
proxy context should be the PropertyHandler for derived trap 'has': PASS
proxy context should be the PropertyHandler for derived trap 'enumerate': PASS
proxy context should be the PropertyHandler for derived trap 'set': PASS
6: ECMAScript 5 implementation methods
Proxy.defineProperty on proxy object: PASS
proxy has newly defined property: PASS
proxy's newly defined property have correct return value: PASS
proxy's newly defined property are reflected in underlying handlers: PASS
Proxy.defineProperties on proxy object: Segmentation fault: 11
I have been unable to reproduce this error on OSX 10.6 and Ubuntu 11.04. Can you provide more detail about your system configuration?
On Mac OS X 10.7.1 I can reproduce the segfault as follows:
cd /tmp
curl -O http://nodejs.org/dist/v0.5.5/node-v0.5.5.tar.gz
tar -xf node-v0.5.5.tar.gz
cd node-v0.5.5
./configure
make
cd /tmp
git clone https://github.com/samshull/node-proxy.git
cd node-proxy
curl -O https://raw.github.com/gist/1182721/7b6f712bd5713bd7e3d728192bcb3b8099edf791/remove_scope_close.diff
echo >> remove_scope_close.diff
git apply remove_scope_close.diff
make
# had to force correct library to be tested
curl -O https://raw.github.com/gist/1201562/453250bb6ed344881615b4f1d6a1cd51542af2f9/test_local_build.diff
git apply test_local_build.diff
/tmp/node-v0.5.5/node test/test.js
The actual crash looks like:
[...]
6: ECMAScript 5 implementation methods
Proxy.defineProperty on proxy object: PASS
proxy has newly defined property: PASS
proxy's newly defined property have correct return value: PASS
proxy's newly defined property are reflected in underlying handlers: PASS
Proxy.defineProperties on proxy object: Segmentation fault: 11
So your first patch makes definite progress, but something's still causing trouble.
I should note that your patch does allow my little test suite for https://github.com/andyet/fermata to all pass successfully under node v0.5.5 — thanks much! Can your patch be applied to the npm version of node-proxy? The patch seems to be working fine under node v0.4.11 too, and only the weird segfault (perhaps not your lib's fault?) under v0.5.5.
Hmmm...I did exactly what you had in your example, except I didn't do git apply remove_scope_close.diff
and I did not have the same problem that you had. But I would like to point out that calling make
in the node-proxy
directory would actually cause node-proxy to be compiled with /usr/local/bin/node-waf
instead of ../node-v0.5.5/tools/node-waf
, the node-waf version that came with node-v0.5.5 that you downloaded. If these 2 versions are not compatible, it could cause errors.
I find it useful to clean up all the old cruft from time to time. From in your node repo directory:
make distclean
git clean -dfx
rm `which node-waf`
rm `which node`
rm -rf /usr/local/include/node
rm -rf /usr/local/lib/node
Then do a clean install of node.
*Of course it could be useful to backup those files and folders in case you want to roll back.
samshull, I'm using arch linux. And I get the same error. I tried re-installing nodejs . It did not work.
I used pacman to reinstall nodejs.
@boopathi, Sorry for the late reply. Did you perform the full cleanup shown in the comment?
After fixing the test to use
require("../lib/node-proxy")
instead of the require.paths.unshift call, the tests still fail under node-0.5.4: