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.401 by root, Mon May 16 22:08:24 2011 UTC vs.
Revision 1.403 by root, Sun May 22 20:13:33 2011 UTC

13#include "XSUB.h" 13#include "XSUB.h"
14#include "perliol.h" 14#include "perliol.h"
15 15
16#include "schmorp.h" 16#include "schmorp.h"
17 17
18#include <stddef.h>
18#include <stdio.h> 19#include <stdio.h>
19#include <errno.h> 20#include <errno.h>
20#include <assert.h> 21#include <assert.h>
21 22
22#ifndef SVs_PADSTALE 23#ifndef SVs_PADSTALE
496 MAGIC *mg; 497 MAGIC *mg;
497 498
498 if (SvROK (coro)) 499 if (SvROK (coro))
499 coro = SvRV (coro); 500 coro = SvRV (coro);
500 501
501 mg = SvSTATEhv_p (coro); 502 mg = SvSTATEhv_p (aTHX_ coro);
502 if (!mg) 503 if (!mg)
503 croak ("Coro::State object required"); 504 croak ("Coro::State object required");
504 505
505 return (struct coro *)mg->mg_ptr; 506 return (struct coro *)mg->mg_ptr;
506} 507}
1727 SvREFCNT_dec (coro->startcv); 1728 SvREFCNT_dec (coro->startcv);
1728 SvREFCNT_dec (coro->args); 1729 SvREFCNT_dec (coro->args);
1729 SvREFCNT_dec (coro->swap_sv); 1730 SvREFCNT_dec (coro->swap_sv);
1730 SvREFCNT_dec (CORO_THROW); 1731 SvREFCNT_dec (CORO_THROW);
1731 1732
1732 coro_call_on_destroy (coro); 1733 coro_call_on_destroy (aTHX_ coro);
1733 1734
1734 /* more destruction mayhem in coro_state_free */ 1735 /* more destruction mayhem in coro_state_free */
1735} 1736}
1736 1737
1737static int 1738static int
1738coro_state_free (pTHX_ SV *sv, MAGIC *mg) 1739coro_state_free (pTHX_ SV *sv, MAGIC *mg)
1739{ 1740{
1740 struct coro *coro = (struct coro *)mg->mg_ptr; 1741 struct coro *coro = (struct coro *)mg->mg_ptr;
1741 mg->mg_ptr = 0; 1742 mg->mg_ptr = 0;
1742 1743
1743 coro_state_destroy (coro); 1744 coro_state_destroy (aTHX_ coro);
1744 SvREFCNT_dec (coro->on_destroy); 1745 SvREFCNT_dec (coro->on_destroy);
1745 SvREFCNT_dec (coro->status); 1746 SvREFCNT_dec (coro->status);
1746 1747
1747 Safefree (coro); 1748 Safefree (coro);
1748 1749
2054 PUTBACK; 2055 PUTBACK;
2055 } 2056 }
2056} 2057}
2057 2058
2058static void 2059static void
2059coro_push_on_destroy (aTHX_ struct coro *coro, SV *cb) 2060coro_push_on_destroy (pTHX_ struct coro *coro, SV *cb)
2060{ 2061{
2061 if (!coro->on_destroy) 2062 if (!coro->on_destroy)
2062 coro->on_destroy = newAV (); 2063 coro->on_destroy = newAV ();
2063 2064
2064 av_push (coro->on_destroy, cb); 2065 av_push (coro->on_destroy, cb);
2078 if (!coro->status) 2079 if (!coro->status)
2079 return 1; 2080 return 1;
2080 2081
2081 frame->destroy = 0; 2082 frame->destroy = 0;
2082 2083
2083 coro_push_av (coro->status, GIMME_V); 2084 coro_push_av (aTHX_ coro->status, GIMME_V);
2084 2085
2085 SvREFCNT_dec ((SV *)coro->hv); 2086 SvREFCNT_dec ((SV *)coro->hv);
2086 2087
2087 return 0; 2088 return 0;
2088} 2089}

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines