Przeglądaj źródła

64bit alignment

ffdfgdfg 5 lat temu
rodzic
commit
0a65975b7e
2 zmienionych plików z 11 dodań i 8 usunięć
  1. 2 2
      lib/mux/conn.go
  2. 9 6
      lib/mux/queue.go

+ 2 - 2
lib/mux/conn.go

@@ -199,7 +199,7 @@ func (Self *window) CloseWindow() {
 
 type ReceiveWindow struct {
 	window
-	bufQueue ReceiveWindowQueue
+	bufQueue *ReceiveWindowQueue
 	element  *common.ListElement
 	count    int8
 	bw       *writeBandwidth
@@ -210,7 +210,7 @@ type ReceiveWindow struct {
 
 func (Self *ReceiveWindow) New(mux *Mux) {
 	// initial a window for receive
-	Self.bufQueue.New()
+	Self.bufQueue = NewReceiveWindowQueue()
 	Self.element = common.ListElementPool.Get()
 	Self.maxSizeDone = Self.pack(common.MAXIMUM_SEGMENT_SIZE*30, 0, false)
 	Self.mux = mux

+ 9 - 6
lib/mux/queue.go

@@ -209,10 +209,10 @@ func NewListElement(buf []byte, l uint16, part bool) (element *common.ListElemen
 }
 
 type ReceiveWindowQueue struct {
+	lengthWait uint64
 	chain      *bufChain
 	stopOp     chan struct{}
 	readOp     chan struct{}
-	lengthWait uint64 // really strange ???? need put here
 	// https://golang.org/pkg/sync/atomic/#pkg-note-BUG
 	// On non-Linux ARM, the 64-bit functions use instructions unavailable before the ARMv6k core.
 	// On ARM, x86-32, and 32-bit MIPS, it is the caller's responsibility
@@ -221,11 +221,14 @@ type ReceiveWindowQueue struct {
 	timeout time.Time
 }
 
-func (Self *ReceiveWindowQueue) New() {
-	Self.readOp = make(chan struct{})
-	Self.chain = new(bufChain)
-	Self.chain.new(64)
-	Self.stopOp = make(chan struct{}, 2)
+func NewReceiveWindowQueue() *ReceiveWindowQueue {
+	queue := ReceiveWindowQueue{
+		chain:  new(bufChain),
+		stopOp: make(chan struct{}, 2),
+		readOp: make(chan struct{}),
+	}
+	queue.chain.new(64)
+	return &queue
 }
 
 func (Self *ReceiveWindowQueue) Push(element *common.ListElement) {