void net·runtime_pollUnblock(PollDesc* pd) { #line 228 "C:\Users\gopher\AppData\Local\Temp\1\makerelease745458658\go\src\pkg\runtime\netpoll.goc" G *rg, *wg; runtime·lock(pd); if(pd->closing) runtime·throw("runtime_pollUnblock: already closing"); pd->closing = true; pd->seq++; runtime·atomicstorep(&rg, nil); // full memory barrier between store to closing and read of rg/wg in netpollunblock rg = netpollunblock(pd, 'r', false); wg = netpollunblock(pd, 'w', false); if(pd->rt.fv) { runtime·deltimer(&pd->rt); pd->rt.fv = nil; } if(pd->wt.fv) { runtime·deltimer(&pd->wt); pd->wt.fv = nil; } runtime·unlock(pd); if(rg) runtime·ready(rg); if(wg) runtime·ready(wg); }
void net·runtime_pollUnblock(PollDesc* pd) { #line 200 "/tmp/makerelease886106415/go/src/pkg/runtime/netpoll.goc" G *rg, *wg; runtime·lock(pd); if(pd->closing) runtime·throw("runtime_pollUnblock: already closing"); pd->closing = true; pd->seq++; rg = netpollunblock(pd, 'r', false); wg = netpollunblock(pd, 'w', false); if(pd->rt.fv) { runtime·deltimer(&pd->rt); pd->rt.fv = nil; } if(pd->wt.fv) { runtime·deltimer(&pd->wt); pd->wt.fv = nil; } runtime·unlock(pd); if(rg) runtime·ready(rg); if(wg) runtime·ready(wg); }
void net·runtime_pollUnblock(PollDesc* pd) { #line 174 "/tmp/bindist907131767/go/src/pkg/runtime/netpoll.goc" G *rg, *wg; runtime·lock(pd); if(pd->closing) runtime·throw("runtime_pollUnblock: already closing"); pd->closing = true; pd->seq++; rg = netpollunblock(pd, 'r'); wg = netpollunblock(pd, 'w'); if(pd->rt.fv) { runtime·deltimer(&pd->rt); pd->rt.fv = nil; } if(pd->wt.fv) { runtime·deltimer(&pd->wt); pd->wt.fv = nil; } runtime·unlock(pd); if(rg) runtime·ready(rg); if(wg) runtime·ready(wg); }
void net·runtime_pollUnblock(PollDesc* pd) { #line 228 "/home/14/ren/source/golang/go/src/pkg/runtime/netpoll.goc" G *rg, *wg; runtime·lock(pd); if(pd->closing) runtime·throw("runtime_pollUnblock: already closing"); pd->closing = true; pd->seq++; runtime·atomicstorep(&rg, nil); // full memory barrier between store to closing and read of rg/wg in netpollunblock rg = netpollunblock(pd, 'r', false); wg = netpollunblock(pd, 'w', false); if(pd->rt.fv) { runtime·deltimer(&pd->rt); pd->rt.fv = nil; } if(pd->wt.fv) { runtime·deltimer(&pd->wt); pd->wt.fv = nil; } runtime·unlock(pd); if(rg) runtime·ready(rg); if(wg) runtime·ready(wg); }
void runtime·netpollready ( G **gpp , PollDesc *pd , int32 mode ) { G *rg , *wg; #line 290 "C:\Users\gopher\AppData\Local\Temp\1\makerelease745458658\go\src\pkg\runtime\netpoll.goc" rg = wg = nil; if ( mode == 'r' || mode == 'r' +'w' ) rg = netpollunblock ( pd , 'r' , true ) ; if ( mode == 'w' || mode == 'r' +'w' ) wg = netpollunblock ( pd , 'w' , true ) ; if ( rg ) { rg->schedlink = *gpp; *gpp = rg; } if ( wg ) { wg->schedlink = *gpp; *gpp = wg; } }
void runtime·netpollready ( G **gpp , PollDesc *pd , int32 mode ) { G *rg , *wg; #line 290 "/home/14/ren/source/golang/go/src/pkg/runtime/netpoll.goc" rg = wg = nil; if ( mode == 'r' || mode == 'r' +'w' ) rg = netpollunblock ( pd , 'r' , true ) ; if ( mode == 'w' || mode == 'r' +'w' ) wg = netpollunblock ( pd , 'w' , true ) ; if ( rg ) { rg->schedlink = *gpp; *gpp = rg; } if ( wg ) { wg->schedlink = *gpp; *gpp = wg; } }
void runtime·netpollready ( G **gpp , PollDesc *pd , int32 mode ) { G *rg , *wg; #line 237 "/tmp/makerelease886106415/go/src/pkg/runtime/netpoll.goc" rg = wg = nil; runtime·lock ( pd ) ; if ( mode == 'r' || mode == 'r' +'w' ) rg = netpollunblock ( pd , 'r' , true ) ; if ( mode == 'w' || mode == 'r' +'w' ) wg = netpollunblock ( pd , 'w' , true ) ; runtime·unlock ( pd ) ; if ( rg ) { rg->schedlink = *gpp; *gpp = rg; } if ( wg ) { wg->schedlink = *gpp; *gpp = wg; } }
void runtime·netpollready ( G **gpp , PollDesc *pd , int32 mode ) { G *rg , *wg; #line 205 "/tmp/bindist907131767/go/src/pkg/runtime/netpoll.goc" rg = wg = nil; runtime·lock ( pd ) ; if ( mode == 'r' || mode == 'r' +'w' ) rg = netpollunblock ( pd , 'r' ) ; if ( mode == 'w' || mode == 'r' +'w' ) wg = netpollunblock ( pd , 'w' ) ; runtime·unlock ( pd ) ; if ( rg ) { rg->schedlink = *gpp; *gpp = rg; } if ( wg ) { wg->schedlink = *gpp; *gpp = wg; } }
static void deadlineimpl ( int64 now , Eface arg , bool read , bool write ) { PollDesc *pd; uint32 seq; G *rg , *wg; #line 318 "/tmp/makerelease886106415/go/src/pkg/runtime/netpoll.goc" USED ( now ) ; pd = ( PollDesc* ) arg.data; #line 322 "/tmp/makerelease886106415/go/src/pkg/runtime/netpoll.goc" seq = ( uintptr ) arg.type; rg = wg = nil; runtime·lock ( pd ) ; if ( seq != pd->seq ) { #line 327 "/tmp/makerelease886106415/go/src/pkg/runtime/netpoll.goc" runtime·unlock ( pd ) ; return; } if ( read ) { if ( pd->rd <= 0 || pd->rt.fv == nil ) runtime·throw ( "deadlineimpl: inconsistent read deadline" ) ; pd->rd = -1; pd->rt.fv = nil; rg = netpollunblock ( pd , 'r' , false ) ; } if ( write ) { if ( pd->wd <= 0 || ( pd->wt.fv == nil && !read ) ) runtime·throw ( "deadlineimpl: inconsistent write deadline" ) ; pd->wd = -1; pd->wt.fv = nil; wg = netpollunblock ( pd , 'w' , false ) ; } runtime·unlock ( pd ) ; if ( rg ) runtime·ready ( rg ) ; if ( wg ) runtime·ready ( wg ) ; }
void net·runtime_pollSetDeadline(PollDesc* pd, int64 d, intgo mode) { #line 164 "C:\Users\gopher\AppData\Local\Temp\1\makerelease745458658\go\src\pkg\runtime\netpoll.goc" G *rg, *wg; runtime·lock(pd); if(pd->closing) { runtime·unlock(pd); return; } pd->seq++; // invalidate current timers // Reset current timers. if(pd->rt.fv) { runtime·deltimer(&pd->rt); pd->rt.fv = nil; } if(pd->wt.fv) { runtime·deltimer(&pd->wt); pd->wt.fv = nil; } // Setup new timers. if(d != 0 && d <= runtime·nanotime()) d = -1; if(mode == 'r' || mode == 'r'+'w') pd->rd = d; if(mode == 'w' || mode == 'r'+'w') pd->wd = d; if(pd->rd > 0 && pd->rd == pd->wd) { pd->rt.fv = &deadlineFn; pd->rt.when = pd->rd; // Copy current seq into the timer arg. // Timer func will check the seq against current descriptor seq, // if they differ the descriptor was reused or timers were reset. pd->rt.arg.type = (Type*)pd->seq; pd->rt.arg.data = pd; runtime·addtimer(&pd->rt); } else { if(pd->rd > 0) { pd->rt.fv = &readDeadlineFn; pd->rt.when = pd->rd; pd->rt.arg.type = (Type*)pd->seq; pd->rt.arg.data = pd; runtime·addtimer(&pd->rt); } if(pd->wd > 0) { pd->wt.fv = &writeDeadlineFn; pd->wt.when = pd->wd; pd->wt.arg.type = (Type*)pd->seq; pd->wt.arg.data = pd; runtime·addtimer(&pd->wt); } } // If we set the new deadline in the past, unblock currently pending IO if any. rg = nil; runtime·atomicstorep(&wg, nil); // full memory barrier between stores to rd/wd and load of rg/wg in netpollunblock if(pd->rd < 0) rg = netpollunblock(pd, 'r', false); if(pd->wd < 0) wg = netpollunblock(pd, 'w', false); runtime·unlock(pd); if(rg) runtime·ready(rg); if(wg) runtime·ready(wg); }
void net·runtime_pollSetDeadline(PollDesc* pd, int64 d, intgo mode) { #line 136 "/tmp/makerelease886106415/go/src/pkg/runtime/netpoll.goc" G *rg, *wg; runtime·lock(pd); if(pd->closing) { runtime·unlock(pd); return; } pd->seq++; // invalidate current timers // Reset current timers. if(pd->rt.fv) { runtime·deltimer(&pd->rt); pd->rt.fv = nil; } if(pd->wt.fv) { runtime·deltimer(&pd->wt); pd->wt.fv = nil; } // Setup new timers. if(d != 0 && d <= runtime·nanotime()) d = -1; if(mode == 'r' || mode == 'r'+'w') pd->rd = d; if(mode == 'w' || mode == 'r'+'w') pd->wd = d; if(pd->rd > 0 && pd->rd == pd->wd) { pd->rt.fv = &deadlineFn; pd->rt.when = pd->rd; // Copy current seq into the timer arg. // Timer func will check the seq against current descriptor seq, // if they differ the descriptor was reused or timers were reset. pd->rt.arg.type = (Type*)pd->seq; pd->rt.arg.data = pd; runtime·addtimer(&pd->rt); } else { if(pd->rd > 0) { pd->rt.fv = &readDeadlineFn; pd->rt.when = pd->rd; pd->rt.arg.type = (Type*)pd->seq; pd->rt.arg.data = pd; runtime·addtimer(&pd->rt); } if(pd->wd > 0) { pd->wt.fv = &writeDeadlineFn; pd->wt.when = pd->wd; pd->wt.arg.type = (Type*)pd->seq; pd->wt.arg.data = pd; runtime·addtimer(&pd->wt); } } // If we set the new deadline in the past, unblock currently pending IO if any. rg = nil; wg = nil; if(pd->rd < 0) rg = netpollunblock(pd, 'r', false); if(pd->wd < 0) wg = netpollunblock(pd, 'w', false); runtime·unlock(pd); if(rg) runtime·ready(rg); if(wg) runtime·ready(wg); }