@@ -157,7 +157,7 @@ public class Call {
157157 private static let callMutex = Mutex ( )
158158
159159 /// Maximum number of messages that can be queued
160- private static var maximumQueuedMessages = 10
160+ public static var messageQueueMaxLength = 0
161161
162162 /// Pointer to underlying C representation
163163 private var underlyingCall : UnsafeMutableRawPointer
@@ -169,7 +169,7 @@ public class Call {
169169 private var owned : Bool
170170
171171 /// A queue of pending messages to send over the call
172- private var pendingMessages : Array < Data >
172+ private var messageQueue : Array < Data >
173173
174174 /// True if a message write operation is underway
175175 private var writing : Bool
@@ -188,7 +188,7 @@ public class Call {
188188 self . underlyingCall = underlyingCall
189189 self . owned = owned
190190 self . completionQueue = completionQueue
191- self . pendingMessages = [ ]
191+ self . messageQueue = [ ]
192192 self . writing = false
193193 self . sendMutex = Mutex ( )
194194 }
@@ -261,10 +261,11 @@ public class Call {
261261 self . sendMutex. lock ( )
262262 defer { self . sendMutex. unlock ( ) }
263263 if self . writing {
264- if self . pendingMessages. count == Call . maximumQueuedMessages {
264+ if ( Call . messageQueueMaxLength > 0 ) && // if max length is <= 0, consider it infinite
265+ ( self . messageQueue. count == Call . messageQueueMaxLength) {
265266 throw CallWarning . blocked
266267 }
267- self . pendingMessages . append ( data)
268+ self . messageQueue . append ( data)
268269 } else {
269270 self . writing = true
270271 try self . sendWithoutBlocking ( data: data, errorHandler: errorHandler)
@@ -281,9 +282,8 @@ public class Call {
281282 self . messageDispatchQueue. async {
282283 self . sendMutex. synchronize {
283284 // if there are messages pending, send the next one
284- if self . pendingMessages. count > 0 {
285- let nextMessage = self . pendingMessages. first!
286- self . pendingMessages. removeFirst ( )
285+ if self . messageQueue. count > 0 {
286+ let nextMessage = self . messageQueue. removeFirst ( )
287287 do {
288288 try self . sendWithoutBlocking ( data: nextMessage, errorHandler: errorHandler)
289289 } catch ( let callError) {
@@ -323,4 +323,9 @@ public class Call {
323323 { ( operationGroup) in completion ( )
324324 } )
325325 }
326+
327+ // Get the current message queue length
328+ public func messageQueueLength( ) -> Int {
329+ return messageQueue. count
330+ }
326331}
0 commit comments