OSSignalInterrupt.st
author Jan Vrany <jan.vrany@labware.com>
Thu, 25 Mar 2021 20:30:03 +0000
branchjv
changeset 25411 248600ba8fd9
parent 17911 a99f15c5efa5
permissions -rw-r--r--
Fix unlikely but possible race in `WeakValueDictionary` It may happen that value in `valueArray` could have been already collected by the GC but #clearDeadSlots have not yet been called. When this happened, `#at:ifAbsentPut:` returned tombstone rather than updating the dictionary with value from block. This commit fixes this by checking whether `valueArray` contain the tombstone and if so, clearing up the dead slots and restarting the operation. HTH.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8329
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     1
"
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     2
 COPYRIGHT (c) 2001 by eXept Software AG
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     3
              All Rights Reserved
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     4
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     5
 This software is furnished under a license and may be used
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    10
 hereby transferred.
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    11
"
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    12
"{ Package: 'stx:libbasic' }"
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    13
8834
5a785e6d7216 Error is now proceedable, since some OS-signals are not fatal.
Stefan Vogel <sv@exept.de>
parents: 8820
diff changeset
    14
ProceedableError subclass:#OSSignalInterrupt
8329
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    15
	instanceVariableNames:''
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    16
	classVariableNames:''
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    17
	poolDictionaries:''
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    18
	category:'Kernel-Exceptions-Control'
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    19
!
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    20
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    21
!OSSignalInterrupt class methodsFor:'documentation'!
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    22
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    23
copyright
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    24
"
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    25
 COPYRIGHT (c) 2001 by eXept Software AG
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    26
              All Rights Reserved
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    27
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    28
 This software is furnished under a license and may be used
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    29
 only in accordance with the terms of that license and with the
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    30
 inclusion of the above copyright notice.   This software may not
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    31
 be provided or otherwise made available to, or used by, any
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    32
 other person.  No title to or ownership of the software is
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    33
 hereby transferred.
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    34
"
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    35
!
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    36
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    37
documentation
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    38
"
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    39
    OSSignalInterrupt is raised, when an operating system signal has been received.
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    40
    The signal number is stored as parameter.
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    41
8332
106278f76c6f Documentation
Stefan Vogel <sv@exept.de>
parents: 8329
diff changeset
    42
    Since signals may be sent asynchronously, an OSSignalInterrupt is only raised, 
106278f76c6f Documentation
Stefan Vogel <sv@exept.de>
parents: 8329
diff changeset
    43
    when handled in the current process.
8329
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    44
8332
106278f76c6f Documentation
Stefan Vogel <sv@exept.de>
parents: 8329
diff changeset
    45
    You can also bind an exception to an os signal with 
106278f76c6f Documentation
Stefan Vogel <sv@exept.de>
parents: 8329
diff changeset
    46
    OperatingSystem>>#operatingSystemSignal:install:
8329
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    47
"
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    48
! !
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    49
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    50
!OSSignalInterrupt class methodsFor:'initialization'!
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    51
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    52
initialize
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    53
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    54
    NotifierString := 'os signal interrupt'.
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    55
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    56
    "
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    57
     self initialize
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    58
    "
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    59
! !
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    60
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    61
!OSSignalInterrupt class methodsFor:'documentation'!
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    62
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    63
version
17892
d86c8bd5ece3 Merged with CVS
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17869
diff changeset
    64
    ^ '$Header: /cvs/stx/stx/libbasic/OSSignalInterrupt.st,v 1.4 2005/04/11 08:53:28 stefan Exp $'
17761
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
    65
!
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
    66
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
    67
version_SVN
17911
a99f15c5efa5 Updated with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17910
diff changeset
    68
    ^ '$Id: OSSignalInterrupt.st 10761 2012-01-19 11:46:00Z vranyj1 $'
8329
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    69
! !
1828c8969866 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    70
17846
24edc476ac18 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17845
diff changeset
    71
OSSignalInterrupt initialize!
17892
d86c8bd5ece3 Merged with CVS
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17869
diff changeset
    72
17910
8d796ca8bd1d Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17892
diff changeset
    73
17911
a99f15c5efa5 Updated with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17910
diff changeset
    74