ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Coro/Coro/State.xs
(Generate patch)

Comparing Coro/Coro/State.xs (file contents):
Revision 1.332 by root, Thu Nov 27 12:20:31 2008 UTC vs.
Revision 1.335 by root, Thu Dec 4 04:31:41 2008 UTC

938 /* copy throw, in case it was set before coro_setup */ 938 /* copy throw, in case it was set before coro_setup */
939 CORO_THROW = coro->except; 939 CORO_THROW = coro->except;
940} 940}
941 941
942static void 942static void
943coro_destruct (pTHX_ struct coro *coro) 943coro_destruct_perl (pTHX_ struct coro *coro)
944{ 944{
945 if (!IN_DESTRUCT) 945 if (!IN_DESTRUCT)
946 { 946 {
947 /* restore all saved variables and stuff */ 947 /* restore all saved variables and stuff */
948 LEAVE_SCOPE (0); 948 LEAVE_SCOPE (0);
1471 --coro_nready; 1471 --coro_nready;
1472 } 1472 }
1473 else 1473 else
1474 coro->flags |= CF_READY; /* make sure it is NOT put into the readyqueue */ 1474 coro->flags |= CF_READY; /* make sure it is NOT put into the readyqueue */
1475 1475
1476 if (coro->mainstack && coro->mainstack != main_mainstack) 1476 if (coro->mainstack
1477 && coro->mainstack != main_mainstack
1478 && !PL_dirty)
1477 { 1479 {
1478 struct coro temp; 1480 struct coro temp;
1479 1481
1480 assert (("FATAL: tried to destroy currently running coroutine (please report)", !(coro->flags & CF_RUNNING))); 1482 assert (("FATAL: tried to destroy currently running coroutine (please report)", !(coro->flags & CF_RUNNING)));
1481 1483
1482 save_perl (aTHX_ &temp); 1484 save_perl (aTHX_ &temp);
1483 load_perl (aTHX_ coro); 1485 load_perl (aTHX_ coro);
1484 1486
1485 coro_destruct (aTHX_ coro); 1487 coro_destruct_perl (aTHX_ coro);
1486 1488
1487 load_perl (aTHX_ &temp); 1489 load_perl (aTHX_ &temp);
1488 1490
1489 coro->slot = 0; 1491 coro->slot = 0;
1490 } 1492 }
2925SV * 2927SV *
2926clone (Coro::State coro) 2928clone (Coro::State coro)
2927 CODE: 2929 CODE:
2928{ 2930{
2929#if CORO_CLONE 2931#if CORO_CLONE
2930 struct coro *ncoro = coro_clone (coro); 2932 struct coro *ncoro = coro_clone (aTHX_ coro);
2931 MAGIC *mg; 2933 MAGIC *mg;
2932 /* TODO: too much duplication */ 2934 /* TODO: too much duplication */
2933 ncoro->hv = newHV (); 2935 ncoro->hv = newHV ();
2934 mg = sv_magicext ((SV *)ncoro->hv, 0, CORO_MAGIC_type_state, &coro_state_vtbl, (char *)ncoro, 0); 2936 mg = sv_magicext ((SV *)ncoro->hv, 0, CORO_MAGIC_type_state, &coro_state_vtbl, (char *)ncoro, 0);
2935 mg->mg_flags |= MGf_DUP; 2937 mg->mg_flags |= MGf_DUP;
3126{ 3128{
3127 int i; 3129 int i;
3128 3130
3129 sv_pool_rss = coro_get_sv (aTHX_ "Coro::POOL_RSS" , TRUE); 3131 sv_pool_rss = coro_get_sv (aTHX_ "Coro::POOL_RSS" , TRUE);
3130 sv_pool_size = coro_get_sv (aTHX_ "Coro::POOL_SIZE" , TRUE); 3132 sv_pool_size = coro_get_sv (aTHX_ "Coro::POOL_SIZE" , TRUE);
3131 cv_coro_run = get_cv ( "Coro::_terminate", GV_ADD); 3133 cv_coro_run = get_cv ( "Coro::_coro_run" , GV_ADD);
3132 cv_coro_terminate = get_cv ( "Coro::terminate" , GV_ADD); 3134 cv_coro_terminate = get_cv ( "Coro::terminate" , GV_ADD);
3133 coro_current = coro_get_sv (aTHX_ "Coro::current" , FALSE); SvREADONLY_on (coro_current); 3135 coro_current = coro_get_sv (aTHX_ "Coro::current" , FALSE); SvREADONLY_on (coro_current);
3134 av_async_pool = coro_get_av (aTHX_ "Coro::async_pool", TRUE); 3136 av_async_pool = coro_get_av (aTHX_ "Coro::async_pool", TRUE);
3135 av_destroy = coro_get_av (aTHX_ "Coro::destroy" , TRUE); 3137 av_destroy = coro_get_av (aTHX_ "Coro::destroy" , TRUE);
3136 sv_manager = coro_get_sv (aTHX_ "Coro::manager" , TRUE); 3138 sv_manager = coro_get_sv (aTHX_ "Coro::manager" , TRUE);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines