-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 07/01/2014 09:44 AM, Ashish wrote:
> 
> I am using libuv in console based application being developed on
> Windows XP When my applications memory usage goes high, at certain
> point (at around 2GB) uv_queue_work crashes with "runtime error"
> and sometimes with "R6016- not enough space for thread data"
> 
> 
> This little piece of code demonstrates the same. The code below
> tries to create 321 threads. (I am using 321 number for demo
> purpose but in original code the number is just 31) 321 is not high
> number of threads on Windows XP. Still why would it crash:
> 
> 
> void work_in_thread(uv_work_t* work_t) { // Allocate some memory 
> char* memory = new (std::nothrow) char[4321];
> 
> // Simulate some delay Sleep(3); }
> 
> void after_work_in_thread(uv_work_t* work_t, int status) { //
> Recreate just ended thread (to maintain thread count) int RetVal =
> uv_queue_work(loop, work_t, work_in_thread, after_work_in_thread); 
> if (RetVal != 0) printf("\nERROR recreating thread"); }
> 
> int main() { loop = uv_default_loop();
> 
> // Create working threads for (int i=0; i<321; i++) { uv_work_t*
> work_t; work_t = (uv_work_t*) malloc(sizeof(uv_work_t)); int RetVal
> = uv_queue_work(loop, work_t, work_in_thread, 
> after_work_in_thread); if (RetVal != 0) printf("\nERROR creating
> thread"); }
> 
> uv_run(loop, UV_RUN_DEFAULT);
> 
> printf ("\nCame out of loop...");
> 
> return 0; }
> 

uv_queue_work doesn't do what you think it does. It does not create a
new thread each time you call it, it calls the given function on the
internal threadpool, which has size 4.

On top of that, you are reusing the uv_work_t request in the
after_work_cb, and I think there was a bug in there. Can you try this
patch? https://gist.github.com/saghul/62da49b306618db381c7 (make sure
you are using latest master)

- -- 
Saúl Ibarra Corretgé
bettercallsaghul.com

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
Comment: Using GnuPG with Icedove - http://www.enigmail.net/

iQIcBAEBAgAGBQJTsm3BAAoJEEEOVVOum8BZ6T8QAL6Y8nqFLsqR0SEN7Eg9D2bU
Q1E93oTe1VfGWlSDsttfgOASkl9uFKJmOnMR/uuLS14k+yVtCYB64xaSpTzBeKzp
dbg9TtFzGKsIVOUDS/Mhp2oDgnDRGU5UeyomHDpjwxoi93FYwayq8iabkjYA/eTB
bFeyu4O6emyKSNWILRAduOJNqOxfMy7sKE/CJDAchddTVLb3Ca8yzzIIrgtskDU/
pqmg6r4h8MKMGPwhGtqMAe1fzhABQPDObLPrnaj7RZZFLLmKSv5xUMS/NU0rJrdJ
aGFKdtkilEhqLkgITI8Yay2U1TzoT0pI7z7SpvPpK+/VwSD8z1yyBL3Wn4DYe/v2
WJtHqRb/K65KfMSdr3IizNyNtcFZggy031UZrQJudFQgxo9/4hSlKY3MiPrE32kD
LaT1jtTdju1VI+6sKYATNc68pss24JSBV4OPgFdfTdu2S5AXy5BnlPURAZZCyYU5
o4v7AV5mK6u83dGV5ytBTq7gDGw6rXK2eqdeqzGjxohyh4R0HxnLzYyuOgNYPtSl
tp0k1dUPrnhcnwmmyrxp8iIhDu5WgaSzjjBSj+GVfkn6ZZstaa2lMGa6Dxf/JEqQ
jQFXeH4nQTIc4veZpwjMt8g9tZqIlnvuI67yTSd2cvt3snbkKj5tOPFx2z9kZ6cv
bTC6XwCl1UmJLvyxXK4t
=fQlG
-----END PGP SIGNATURE-----

-- 
You received this message because you are subscribed to the Google Groups 
"libuv" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/libuv.
For more options, visit https://groups.google.com/d/optout.

Reply via email to