I think you are missing a handle scope:
void* fp = new std::function<void(void)>(
[=]()
{
v::Locker locker(gIsolate);
v8::Isolate::Scope scope(gIsolate);
                                v8::HandleScope handle_scope(gIsolate);
std::vector<char> data = Download(url);
v::Handle<v::Value> arg = v::String::New(data.data(),data.size());
funcCopy->Call(gContext->Global(),1,&arg);
 }

Also, did you make sure that _all_ the code - including the code on main
thread - that you execute in gIsolate is protected by v8::Locker?

Hope this helps,
Dmitry


On Fri, Jun 7, 2013 at 5:15 PM, papi <[email protected]> wrote:

> Hello, im trying to bind a download function but i get fatal error in
> api.h line 549 CHECK(blocks_.length() == 0)
> also my english is bad (sry)
>
> my program goes like that
>
> main thread call jsMainFunction
> jsMainFunction
> ----
> function jsMainFunction ()
> {
> _get("www.google.com",true,
> function(data){
> print("downloaded:  ",data);
> }
> );
> }
> ---
>
> jsMainFunction call native downloadfunction (_BindDownloadGet aka _get)
>
> ----
> v::Handle<v::Value> _BindDownloadGet(const v::Arguments& args)
> {
> ....
> if(args.Length() == 3
> && args[0]->IsString()
> && args[1]->IsBoolean()
> && args[1]->ToBoolean()->BooleanValue()
> && args[2]->IsFunction()
> )
> {
> //async
> v::Persistent<v::Function> funcCopy =
> v::Persistent<v::Function>::New(
> v::Handle<v::Function>::Cast(args[2])
> );
> void* fp = new std::function<void(void)>(
> [=]()
> {
> v::Locker locker(gIsolate);
> v8::Isolate::Scope scope(gIsolate);
> std::vector<char> data = Download(url);
> v::Handle<v::Value> arg = v::String::New(data.data(),data.size());
> funcCopy->Call(gContext->Global(),1,&arg);
>  }
> );
> CreateThread(0,0,_WinCallbackHost,fp,0,0);
> return v::Undefined();
> }
> //sync
> std::vector<char> data = Download(url);
> return v::String::New(data.data(),data.size());
> }
> ----
>
> (the _WinCallbackHost its just call lambda and deleteing the fp)
>
> The program is downloading the data and printing that data, but when
> locker destructor is called the program crash with fatal error
>
> PS
> this is the print binding
> v::Handle<v::Value> _BindWriteConsole(const v::Arguments& args)
> {
> for(int i = 0; i < args.Length(); i++)
> if(args[i]->IsString())
> StockObserverConsoleWrite(Utf8ToWide(*v::String::Utf8Value(args[i])));
> return v::Undefined();
> }
>
> PS1: Its a native win32 gui application
>
> PS2: visual studio 2012
>
> PS3: windows 7
>
> PS4: Sorry fro my bad english
>
>
>
>  --
> --
> v8-users mailing list
> [email protected]
> http://groups.google.com/group/v8-users
> ---
> You received this message because you are subscribed to the Google Groups
> "v8-users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>

-- 
-- 
v8-users mailing list
[email protected]
http://groups.google.com/group/v8-users
--- 
You received this message because you are subscribed to the Google Groups 
"v8-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to