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 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 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 net·runtime_pollSetDeadline(PollDesc* pd, int64 d, intgo mode) { #line 123 "/tmp/bindist907131767/go/src/pkg/runtime/netpoll.goc" runtime·lock(pd); if(pd->closing) goto ret; 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); } } ret: runtime·unlock(pd); }
void time·stopTimer(Timer* t, bool stopped) { stopped = 0; FLUSH(&stopped); #line 51 "/home/14/ren/source/golang/go/src/pkg/runtime/time.goc" stopped = runtime·deltimer(t); FLUSH(&stopped); }
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); }