5
0
mirror of https://github.com/cwinfo/yggdrasil-go.git synced 2024-11-23 00:51:35 +00:00

Merge pull request #137 from yggdrasil-network/develop

Integrate history from develop for v0.2.1
This commit is contained in:
Neil Alexander 2018-06-17 18:27:37 +01:00 committed by GitHub
commit b415adee6d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 33 additions and 10 deletions

View File

@ -1,26 +1,46 @@
#!/bin/sh #!/bin/sh
# Merge commits from this branch are counted
DEVELOPBRANCH="yggdrasil-network/develop"
# Get the last tag # Get the last tag
TAG=$(git describe --abbrev=0 --tags --match="v[0-9]*\.[0-9]*" 2>/dev/null) TAG=$(git describe --abbrev=0 --tags --match="v[0-9]*\.[0-9]*" 2>/dev/null)
# Get the number of commits from the last tag # Get last merge to master
COUNT=$(git rev-list $TAG..HEAD --count 2>/dev/null) MERGE=$(git rev-list $TAG..master --grep "from $DEVELOPBRANCH" 2>/dev/null | head -n 1)
# Get the number of merges since the last merge to master
PATCH=$(git rev-list $TAG..master --count --merges --grep="from $DEVELOPBRANCH" 2>/dev/null)
# If it fails then there's no last tag - go from the first commit # If it fails then there's no last tag - go from the first commit
if [ $? != 0 ]; then if [ $? != 0 ]; then
COUNT=$(git rev-list HEAD --count 2>/dev/null) PATCH=$(git rev-list HEAD --count 2>/dev/null)
printf 'v0.0.%d' "$COUNT" printf 'v0.0.%d' "$PATCH"
exit -1 exit -1
fi fi
# Get the number of merges on the current branch since the last tag
BUILD=$(git rev-list $TAG..HEAD --count --merges)
# Split out into major, minor and patch numbers # Split out into major, minor and patch numbers
MAJOR=$(echo $TAG | cut -c 2- | cut -d "." -f 1) MAJOR=$(echo $TAG | cut -c 2- | cut -d "." -f 1)
MINOR=$(echo $TAG | cut -c 2- | cut -d "." -f 2) MINOR=$(echo $TAG | cut -c 2- | cut -d "." -f 2)
# Get the current checked out branch
BRANCH=$(git rev-parse --abbrev-ref HEAD)
# Output in the desired format # Output in the desired format
if [ $COUNT = 0 ]; then if [ $PATCH = 0 ]; then
printf 'v%d.%d' "$MAJOR" "$MINOR" printf 'v%d.%d' "$MAJOR" "$MINOR"
else else
printf 'v%d.%d.%d' "$MAJOR" "$MINOR" "$COUNT" printf 'v%d.%d.%d' "$MAJOR" "$MINOR" "$PATCH"
fi fi
# Add the build tag on non-master branches
if [ $BRANCH != "master" ]; then
if [ $BUILD != 0 ]; then
printf -- "-%04d" "$BUILD"
fi
fi

View File

@ -26,6 +26,7 @@ import (
) )
const tcp_msgSize = 2048 + 65535 // TODO figure out what makes sense const tcp_msgSize = 2048 + 65535 // TODO figure out what makes sense
const tcp_timeout = 6 * time.Second
// Wrapper function for non tcp/ip connections. // Wrapper function for non tcp/ip connections.
func setNoDelay(c net.Conn, delay bool) { func setNoDelay(c net.Conn, delay bool) {
@ -109,6 +110,8 @@ func (iface *tcpInterface) call(saddr string, socksaddr *string) {
} else { } else {
iface.calls[saddr] = struct{}{} iface.calls[saddr] = struct{}{}
defer func() { defer func() {
// Block new calls for a little while, to mitigate livelock scenarios
time.Sleep(tcp_timeout)
iface.mutex.Lock() iface.mutex.Lock()
delete(iface.calls, saddr) delete(iface.calls, saddr)
iface.mutex.Unlock() iface.mutex.Unlock()
@ -162,7 +165,7 @@ func (iface *tcpInterface) handler(sock net.Conn, incoming bool) {
if err != nil { if err != nil {
return return
} }
timeout := time.Now().Add(6 * time.Second) timeout := time.Now().Add(tcp_timeout)
sock.SetReadDeadline(timeout) sock.SetReadDeadline(timeout)
_, err = sock.Read(metaBytes) _, err = sock.Read(metaBytes)
if err != nil { if err != nil {
@ -257,7 +260,7 @@ func (iface *tcpInterface) handler(sock net.Conn, incoming bool) {
atomic.AddUint64(&p.bytesSent, uint64(len(tcp_msg)+len(msgLen)+len(msg))) atomic.AddUint64(&p.bytesSent, uint64(len(tcp_msg)+len(msgLen)+len(msg)))
util_putBytes(msg) util_putBytes(msg)
} }
timerInterval := 4 * time.Second timerInterval := tcp_timeout * 2 / 3
timer := time.NewTimer(timerInterval) timer := time.NewTimer(timerInterval)
defer timer.Stop() defer timer.Stop()
for { for {
@ -334,7 +337,7 @@ func (iface *tcpInterface) reader(sock net.Conn, in func([]byte)) {
bs := make([]byte, 2*tcp_msgSize) bs := make([]byte, 2*tcp_msgSize)
frag := bs[:0] frag := bs[:0]
for { for {
timeout := time.Now().Add(6 * time.Second) timeout := time.Now().Add(tcp_timeout)
sock.SetReadDeadline(timeout) sock.SetReadDeadline(timeout)
n, err := sock.Read(bs[len(frag):]) n, err := sock.Read(bs[len(frag):])
if err != nil || n == 0 { if err != nil || n == 0 {

View File

@ -117,7 +117,7 @@ func main() {
// of it - remove it and decode back down into UTF-8. This is necessary // of it - remove it and decode back down into UTF-8. This is necessary
// because hjson doesn't know what to do with UTF-16 and will panic // because hjson doesn't know what to do with UTF-16 and will panic
if bytes.Compare(config[0:2], []byte{0xFF, 0xFE}) == 0 || if bytes.Compare(config[0:2], []byte{0xFF, 0xFE}) == 0 ||
bytes.Compare(config[0:2], []byte{0xFF, 0xFF}) == 0 { bytes.Compare(config[0:2], []byte{0xFE, 0xFF}) == 0 {
utf := unicode.UTF16(unicode.BigEndian, unicode.UseBOM) utf := unicode.UTF16(unicode.BigEndian, unicode.UseBOM)
decoder := utf.NewDecoder() decoder := utf.NewDecoder()
config, err = decoder.Bytes(config) config, err = decoder.Bytes(config)