Yes, you're right. I started to refactor my code to callback-based
architecture...
Thanks for support!
26.01.2017 0:04, Alon Zakai пишет:
Looking at the stack traces, I think that Demo$loadJSON is a method of
yours (not from emscripten) that calls into emscripten code? If it
does something like this
function Demo$loadJSON(..) {
..
call into compiled code that does an async operation like
emscripten_wget
run any more code (either compiled code, or code that depends on
compiled code)
}
Then that won't work. When an async operation happens, we unwind the
call stack. That is, we return, which means we go right into "run any
more code". If that calls into compiled code (or assumes the compiled
code finished running the async operation), it's an error. Instead,
you need to wait for the compiled code to resume, which it will
asynchronously at some future time.
This limitation is because we can only unwind and resume the call
stack for code that we control - which is emterpreted code, and some
of our JS wrapper code around it (like emscripten_main_loop support
code). But general JS, we can't make it async.
On Wed, Jan 25, 2017 at 3:03 AM, Евгений Чудинов
<[email protected] <mailto:[email protected]>> wrote:
I try to run program with this function (just run it), looks that
they doing something, but again I got same error (and ~same
stacktrace).
Stacktrace:
uncaught exception: abort(-12) at
jsStackTrace@http://localhost:8000/Build/Demo-Debug/Demo.js:1176:13
<http://localhost:8000/Build/Demo-Debug/Demo.js:1176:13>
stackTrace@http://localhost:8000/Build/Demo-Debug/Demo.js:1193:22
<http://localhost:8000/Build/Demo-Debug/Demo.js:1193:22>
abort@http://localhost:8000/Build/Demo-Debug/Demo.js:243925:44
<http://localhost:8000/Build/Demo-Debug/Demo.js:243925:44>
_free@http://localhost:8000/Build/Demo-Debug/Demo.js:112914:15
<http://localhost:8000/Build/Demo-Debug/Demo.js:112914:15>
DemoLib/asm._free@http://localhost:8000/Build/Demo-Debug/Demo.js:243611:8
<http://localhost:8000/Build/Demo-Debug/Demo.js:243611:8>
__embind_register_std_string/<.destructorFunction@http://localhost:8000/Build/Demo-Debug/Demo.js:5480:47
<http://localhost:8000/Build/Demo-Debug/Demo.js:5480:47>
Demo$loadJSON@http://localhost:8000/Build/Demo-Debug/Demo.js
<http://localhost:8000/Build/Demo-Debug/Demo.js> line 11926 >
Function:8:1
@http://localhost:8000/:57:13
This error happened during an emterpreter-async save or load of
the stack. Was there non-emterpreted code on the stack during save
(which is unallowed)? You may want to adjust
EMTERPRETIFY_BLACKLIST, EMTERPRETIFY_WHITELIST.
This is what the stack looked like when we tried to save it:
1,DemoLib/EmterpreterAsync.handle@http://localhost:8000/Build/Demo-Debug/Demo.js:8956:40
<http://localhost:8000/Build/Demo-Debug/Demo.js:8956:40>
_emscripten_wget_data@http://localhost:8000/Build/Demo-Debug/Demo.js:10516:7
<http://localhost:8000/Build/Demo-Debug/Demo.js:10516:7>
emterpret@http://localhost:8000/Build/Demo-Debug/Demo.js:69760:6
<http://localhost:8000/Build/Demo-Debug/Demo.js:69760:6>
_loadImageSync@http://localhost:8000/Build/Demo-Debug/Demo.js:187039:2
<http://localhost:8000/Build/Demo-Debug/Demo.js:187039:2>
emterpret@http://localhost:8000/Build/Demo-Debug/Demo.js:62954:6
<http://localhost:8000/Build/Demo-Debug/Demo.js:62954:6>
__ZN17DemoImageLoader9loadImageEP7NString@http://localhost:8000/Build/Demo-Debug/Demo.js:198517:2
<http://localhost:8000/Build/Demo-Debug/Demo.js:198517:2>
emterpret@http://localhost:8000/Build/Demo-Debug/Demo.js:23477:11
<http://localhost:8000/Build/Demo-Debug/Demo.js:23477:11>
__ZN16DemoJSONParser10parseBrushEP7NObject@http://localhost:8000/Build/Demo-Debug/Demo.js:198527:2
<http://localhost:8000/Build/Demo-Debug/Demo.js:198527:2>
emterpret@http://localhost:8000/Build/Demo-Debug/Demo.js:23422:11
<http://localhost:8000/Build/Demo-Debug/Demo.js:23422:11>
__ZN16DemoJSONParser9parseJSONEP11NDictionaryP7NObject@http://localhost:8000/Build/Demo-Debug/Demo.js:160452:2
<http://localhost:8000/Build/Demo-Debug/Demo.js:160452:2>
emterpret@http://localhost:8000/Build/Demo-Debug/Demo.js:62866:6
<http://localhost:8000/Build/Demo-Debug/Demo.js:62866:6>
__ZN6Demo8loadJSONERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE@http://localhost:8000/Build/Demo-Debug/Demo.js:149758:2
<http://localhost:8000/Build/Demo-Debug/Demo.js:149758:2>
emterpret@http://localhost:8000/Build/Demo-Debug/Demo.js:14579:6
<http://localhost:8000/Build/Demo-Debug/Demo.js:14579:6>
__ZN10emscripten8internal13MethodInvokerIM6DemoFvRKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEEvPS2_JSB_EE6invokeERKSD_SE_PNS0_11BindingTypeIS9_EUt_E@http://localhost:8000/Build/Demo-Debug/Demo.js:124597:2
<http://localhost:8000/Build/Demo-Debug/Demo.js:124597:2>
dynCall_viii@http://localhost:8000/Build/Demo-Debug/Demo.js:236591:2
<http://localhost:8000/Build/Demo-Debug/Demo.js:236591:2>
dynCall_viii_3574@http://localhost:8000/Build/Demo-Debug/Demo.js
<http://localhost:8000/Build/Demo-Debug/Demo.js> line 8328 >
Function:2:12
Demo$loadJSON@http://localhost:8000/Build/Demo-Debug/Demo.js
<http://localhost:8000/Build/Demo-Debug/Demo.js> line 11926 >
Function:7:1
@http://localhost:8000/:57:13
May be I use Emterpret wrong?
In Makefile:
DEBUG_OPTS = $(COMMON_OPTS) -O0 -g2 -D__DEBUG__ -Wno-sign-compare
-Wno-unknown-pragmas --bind -s ALLOW_MEMORY_GROWTH=1
--profiling-funcs -s EMTERPRETIFY=1 -s EMTERPRETIFY_ASYNC=1
DEBUG_LINKER_OPTS = -s DEMANGLE_SUPPORT=1 -s
EXPORT_NAME=\"'DemoLib'\" -s MODULARIZE=1 -s STB_IMAGE=1
Code now looks like:
unsigned char buffer[MAX_BUFFER_MEMORY];
int pnum = 0;
int perror = 0;
emscripten_wget_data(url, (void**)(&buffer), &pnum, &perror);
Log("pnum = %d", "perror = %d", pnum, perror);
Any suggestions?
P.S. I use IMG_Load to decode loaded image, that why I try to use
without _data methods.
среда, 25 января 2017 г., 10:45:55 UTC+5 пользователь Alon Zakai
написал:
Looks like we supported emscripten_wget_data in emterpreter
mode, but not emscripten_wget (without _data). Should be fixed in
https://github.com/kripken/emscripten/pull/4886
<https://github.com/kripken/emscripten/pull/4886>
Does that make it work for you?
On Tue, Jan 24, 2017 at 8:13 AM, Евгений Чудинов
<[email protected]> wrote:
I try to load image from url.
My code looks like (c++):
extern "C" void loadImageSync(const char *url, const char
*fileName)
{
emscripten_wget(url, fileName);
}
This work, but with -s ASYNCFY=1 size of result JS file
become ~130mb (It was ~3mb before). This is too heavy for
me and I try to use emscripten_async_wget and
emscripten_sleep/emscripten_sleep_with_yield like:
loadImage_fileLoaded = false;
emscripten_async_wget(url, fileName, &loadImage_onLoad,
&loadImage_onError);
while (!loadImage_fileLoaded) {
emscripten_sleep(10);
}
And this not work. I try to use -s EMTERPRETIFY=1 -s
EMTERPRETIFY_ASYNC=1 and get error about "add functions to
whitelist" -- but as far as I understand, this link flags
add everything to whitelist.
Error message:
This error happened during an emterpreter-async save or
load of the stack. Was there non-emterpreted code on the
stack during save (which is unallowed)? You may want to
adjust EMTERPRETIFY_BLACKLIST, EMTERPRETIFY_WHITELIST.
Ok, lets add this (that listed in stacktrace) functions to
whitelist. But at any added function I get undefined error.
What I need to do? How to load image sync and safe ~small
size of file?
--
You received this message because you are subscribed to
the Google Groups "emscripten-discuss" 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/d/optout
<https://groups.google.com/d/optout>.
--
You received this message because you are subscribed to the Google
Groups "emscripten-discuss" group.
To unsubscribe from this group and stop receiving emails from it,
send an email to [email protected]
<mailto:[email protected]>.
For more options, visit https://groups.google.com/d/optout
<https://groups.google.com/d/optout>.
--
You received this message because you are subscribed to a topic in the
Google Groups "emscripten-discuss" group.
To unsubscribe from this topic, visit
https://groups.google.com/d/topic/emscripten-discuss/1ItIu8_SewA/unsubscribe.
To unsubscribe from this group and all its topics, send an email to
[email protected]
<mailto:[email protected]>.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups
"emscripten-discuss" 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/d/optout.