github.com/Cloud-Foundations/Dominator@v0.3.4/lib/net/cpuSharingDialer.go (about) 1 package net 2 3 import ( 4 "net" 5 ) 6 7 type cpuSharingConnection struct { 8 net.Conn 9 cpuSharer CpuSharer 10 } 11 12 type cpuSharingDialer struct { 13 dialer Dialer 14 cpuSharer CpuSharer 15 } 16 17 func newCpuSharingDialer(dialer Dialer, cpuSharer CpuSharer) Dialer { 18 return &cpuSharingDialer{dialer: dialer, cpuSharer: cpuSharer} 19 } 20 21 func (d *cpuSharingDialer) Dial(network, address string) (net.Conn, error) { 22 d.cpuSharer.ReleaseCpu() 23 defer d.cpuSharer.GrabCpu() 24 netConn, err := d.dialer.Dial(network, address) 25 if err != nil { 26 return nil, err 27 } 28 return &cpuSharingConnection{Conn: netConn, cpuSharer: d.cpuSharer}, nil 29 } 30 31 func (conn *cpuSharingConnection) Read(b []byte) (n int, err error) { 32 conn.cpuSharer.ReleaseCpu() 33 defer conn.cpuSharer.GrabCpu() 34 return conn.Conn.Read(b) 35 } 36 37 func (conn *cpuSharingConnection) Write(b []byte) (n int, err error) { 38 conn.cpuSharer.ReleaseCpu() 39 defer conn.cpuSharer.GrabCpu() 40 return conn.Conn.Write(b) 41 }