From 68d7daea8dc3a898576d6a5f91d4323c94c3c661 Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Fri, 17 Dec 2010 22:03:13 +0100 Subject: sccp: Take the lock for the accessing of the connection list --- SCCPHandler.st | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) (limited to 'SCCPHandler.st') diff --git a/SCCPHandler.st b/SCCPHandler.st index 309a930..deb8c34 100644 --- a/SCCPHandler.st +++ b/SCCPHandler.st @@ -205,16 +205,27 @@ Object subclass: MSGParser [ ] Object subclass: SCCPHandler [ - | connections last_ref connection | + | connections last_ref connection sem | + SCCPHandler class >> new [ + ^ super new initialize; yourself + ] + + initialize [ + sem := Semaphore forMutualExclusion. + ] + addConnection: aConnection [ - self connections add: aConnection. - aConnection srcRef: self assignSrcRef. + sem critical: [ + self connections add: aConnection. + aConnection srcRef: self assignSrcRef. + ]. ] removeConnection: aConnection [ self connections remove: aConnection. + ] registerOn: aDispatcher [ @@ -224,7 +235,9 @@ Object subclass: SCCPHandler [ connectionTimeout: aConnection [ ('SCCP Connection ', aConnection srcRef asString, ' timeout.') printNl. - self removeConnection: aConnection. + sem critical: [ + self removeConnection: aConnection. + ] ] forwardMessage: aMessage with: aConnection[ @@ -258,11 +271,13 @@ Object subclass: SCCPHandler [ ] dispatchMessage: aMessage [ - self connections do: [:each | - each srcRef = aMessage dst - ifTrue: [ - ^ self forwardMessage: aMessage with: each. - ]. + sem critical: [ + self connections do: [:each | + each srcRef = aMessage dst + ifTrue: [ + ^ self forwardMessage: aMessage with: each. + ]. + ] ]. 'No one has handled the connection with ', aMessage dst asString printNl. -- cgit v1.2.3