Skip to content

Commit ee457d8

Browse files
committed
Make Call message queue length and max length public.
1 parent 8a7af4b commit ee457d8

File tree

1 file changed

+13
-8
lines changed

1 file changed

+13
-8
lines changed

Sources/gRPC/Call.swift

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)