[squeak-dev] The Inbox: Chronology-Core-dtl.48.mcz

David T. Lewis lewis at mail.msen.com
Fri Jul 5 17:12:39 UTC 2019


This fixes a problem that went unnoticed because most of us do not use obsolete
VMs. But it could be an issue for someone porting the VM to a new platform, so
it's worth fixing.

Dave

On Fri, Jul 05, 2019 at 05:08:17PM +0000, commits at source.squeak.org wrote:
> A new version of Chronology-Core was added to project The Inbox:
> http://source.squeak.org/inbox/Chronology-Core-dtl.48.mcz
> 
> ==================== Summary ====================
> 
> Name: Chronology-Core-dtl.48
> Author: dtl
> Time: 5 July 2019, 1:08:16.059032 pm
> UUID: 7f33ce2e-ae95-48ef-a526-63da7ddfd885
> Ancestors: Chronology-Core-cmm.47
> 
> Fix fallback code for primPosixMicrosecondClockWithOffset: to not allow DateAndTime class>>now to create an instance with nil instance variables. Previous fallback code was a cut and paste error, never worked as intended.
> 
> Rationale for the fallback handling: Corrupt DateAndTime can quickly lead to a broken image. A default value of the Posix epoch is easily recognized as un uninitialized DateAndTime.
> 
> To test, evaluate "Time clockPolicy: #acceptPlatformTime" and comment out the primitive call in Time class>>primPosixMicrosecondClockWithOffset: to simulate the case of a VM that does not provide primitiveUtcWithOffset. In this case, DateAndTime now produces 1970-01-01T00:00:00+00:00. After testing, do Time initialze to restore clock policy.
> 
> =============== Diff against Chronology-Core-cmm.47 ===============
> 
> Item was changed:
>   ----- Method: Time class>>posixMicrosecondClockWithOffset: (in category 'clock') -----
>   posixMicrosecondClockWithOffset: aDateAndTime
>   	"Initialize aDateAndTime initialized with local microseconds since the Posix
>   	epoch and the current seconds offset from GMT in the local time zone."
>   
>   
>   	| utcValue |
>   	self primPosixMicrosecondClockWithOffset: aDateAndTime.
> - 	aDateAndTime utcMicroseconds ifNil: [ ^aDateAndTime]. "primitive failed"
>   	ClockPolicy caseOf: {
>   		[#acceptPlatformTime] -> [^ aDateAndTime] .
>   		[#monotonicAllowDuplicates] -> [
>   			utcValue := aDateAndTime utcMicroseconds.
>   			utcValue > LastClockTick
>   				ifTrue: [LastClockTick := utcValue]
>   				ifFalse: [aDateAndTime utcMicroseconds: LastClockTick]] .
>   		[#monotonicForceMicrosecondIncrement] -> [
>   			utcValue := aDateAndTime utcMicroseconds.
>   			utcValue > LastClockTick
>   				ifTrue: [LastClockTick := utcValue]
>   				ifFalse: [LastClockTick := LastClockTick + 1. "add one microsecond"
>   					aDateAndTime utcMicroseconds: LastClockTick]] .
>   		[#monotonicForceNanosecondIncrement] -> [
>   			utcValue := aDateAndTime utcMicroseconds.
>   			utcValue > LastClockTick
>   				ifTrue: [LastClockTick := utcValue]
>   				ifFalse: [LastClockTick := LastClockTick + (1 / 1000). "add one nanosecond"
>   					aDateAndTime utcMicroseconds: LastClockTick]]
>   	} otherwise: [].
>   	^aDateAndTime
>   !
> 
> Item was changed:
>   ----- Method: Time class>>primPosixMicrosecondClockWithOffset: (in category 'private') -----
>   primPosixMicrosecondClockWithOffset: arrayOrObjectWithTwoSlots
>   	"Answer an array with UTC microseconds since the Posix epoch and the
>   	current seconds offset from GMT in the local time zone. If the primitive is
>   	not available, then answer the time and offset of Posix epoch GMT. This enables
>   	the image to continue running in the absence of #primitiveUtcWithOffset, thus
>   	avoiding the need to fallback code based on the earlier local microsecond clock
>   	mechanism.
>   
>   	The parameter may be a two element array, or an object whose first two instance
>   	variables are expected to be UTC microseconds and seconds offset from GMT."
>   
>   	<primitive: 'primitiveUtcWithOffset'>
> + 
> + 	(arrayOrObjectWithTwoSlots instVarAt: 1)
> + 		ifNil: [arrayOrObjectWithTwoSlots instVarAt: 1 put: 0].
> + 	(arrayOrObjectWithTwoSlots instVarAt: 2)
> + 		ifNil: [arrayOrObjectWithTwoSlots instVarAt: 2 put: 0]!
> - 	^{0. 0}!
> 
> 


More information about the Squeak-dev mailing list