[ https://issues.apache.org/jira/browse/COUCHDB-982?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Adam Kocoloski updated COUCHDB-982: ----------------------------------- Component/s: (was: Database Core) JavaScript View Server > [PATCH] couchdb won't work with debug version of spidermonkey > ------------------------------------------------------------- > > Key: COUCHDB-982 > URL: https://issues.apache.org/jira/browse/COUCHDB-982 > Project: CouchDB > Issue Type: Bug > Components: JavaScript View Server > Affects Versions: 1.0.1 > Reporter: Petr Běhan > Priority: Minor > > Steps to reproduce: > 1) configure spidermonkey with --enable-debug --enable-threadsafe and compile > it > 2) make couchdb use it (in my case install it as system-wide library, or > through LD_LIBRARY_PATH) > 3) restart couchdb server > 4) attempt to query any view via http > Observed behaviour: > View query returns nothing, server pegs all CPUs, top shows nothing (spawned > children die too fast to register on top) and /var/log/couchdb/couch.log > starts filling with lines similar to "[Wed, 08 Dec 2010 21:59:37 GMT] [error] > [<0.205.0>] OS Process Error <0.1056.0> :: > {os_process_error,{exit_status,134}}" at rate of about 70 errors per second > (which itself is a separate bug in my opinion, it should attempt to call the > child once, and if it fails, stop further attempts and notify client of > http/500 error) > Problem is in incorrect use of JS_DestroyContext call. JSAPI documentation > says that the context being destroyed may or may not be inside active > request. But it doesn't explicitly mention that the calling thread MUST be > set as current for the context. In src/couchdb/priv/couch_js/main.c, the > macro FINISH_REQUEST incorrectly calls JS_ClearContextThread, which is > intended to TRANSFER the context to another thread instead. The > JS_DestroyContext call then triggers spidermonkey assert. > Since "JS_NewContext automatically associates the new context with the > calling thread.", I think the thread stuff should be completely dropped from > both SETUP_REQUEST and FINISH_REQUEST macros and let spidermonkey take care > of itself (unless there are plans to add threads to couch_js in future). > Following simple patch fixes couchdb on my system: > --- src/couchdb/priv/couch_js/main.c.orig 2010-12-09 00:40:40.000000000 > +0100 > +++ src/couchdb/priv/couch_js/main.c 2010-12-09 01:03:34.000000000 +0100 > @@ -23,11 +23,9 @@ > #ifdef JS_THREADSAFE > #define SETUP_REQUEST(cx) \ > - JS_SetContextThread(cx); \ > JS_BeginRequest(cx); > #define FINISH_REQUEST(cx) \ > - JS_EndRequest(cx); \ > - JS_ClearContextThread(cx); > + JS_EndRequest(cx); > #else > #define SETUP_REQUEST(cx) > #define FINISH_REQUEST(cx) -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira