浏览代码

ensure 64 bit alignment for 64 bit struct fields access atomically

Nicola Murino 4 年之前
父节点
当前提交
ea0bf5e4c8
共有 2 个文件被更改,包括 8 次插入7 次删除
  1. 3 2
      common/connection.go
  2. 5 5
      common/transfer.go

+ 3 - 2
common/connection.go

@@ -20,6 +20,9 @@ import (
 
 // BaseConnection defines common fields for a connection using any supported protocol
 type BaseConnection struct {
+	// last activity for this connection.
+	// Since this is accessed atomically we put as first element of the struct achieve 64 bit alignment
+	lastActivity int64
 	// Unique identifier for the connection
 	ID string
 	// user associated with this connection if any
@@ -29,8 +32,6 @@ type BaseConnection struct {
 	protocol  string
 	Fs        vfs.Fs
 	sync.RWMutex
-	// last activity for this connection
-	lastActivity    int64
 	transferID      uint64
 	activeTransfers []ActiveTransfer
 }

+ 5 - 5
common/transfer.go

@@ -21,20 +21,20 @@ var (
 // BaseTransfer contains protocols common transfer details for an upload or a download.
 type BaseTransfer struct { //nolint:maligned
 	ID             uint64
+	BytesSent      int64
+	BytesReceived  int64
 	Fs             vfs.Fs
 	File           vfs.File
 	Connection     *BaseConnection
 	cancelFn       func()
 	fsPath         string
+	requestPath    string
 	start          time.Time
-	transferType   int
+	MaxWriteSize   int64
 	MinWriteOffset int64
 	InitialSize    int64
 	isNewFile      bool
-	requestPath    string
-	BytesSent      int64
-	BytesReceived  int64
-	MaxWriteSize   int64
+	transferType   int
 	AbortTransfer  int32
 	sync.Mutex
 	ErrTransfer error