Endless recursion: "String new: -1"

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

Endless recursion: "String new: -1"

marcel.taeumel
Hi, there!

Is it okay that there is an endless recursion when evaluating "String new: -1"?

...
ByteString class(Behavior)>>handleFailingFailingBasicNew:
ByteString class(Behavior)>>handleFailingBasicNew:
ByteString class(Behavior)>>basicNew:
ByteString class(Behavior)>>handleFailingFailingBasicNew:
ByteString class(Behavior)>>handleFailingBasicNew:
ByteString class(Behavior)>>basicNew:
ByteString class(Behavior)>>handleFailingFailingBasicNew:
ByteString class(Behavior)>>handleFailingBasicNew:
ByteString class(Behavior)>>basicNew:
...

I would like to have an error signaled instead. Note that the -1 is just an example for a bad computation. The error I get is "Space is low" then. :-)


Best,
Marcel
Reply | Threaded
Open this post in threaded view
|

Re: Endless recursion: "String new: -1"

David T. Lewis
On Wed, Jul 06, 2016 at 06:43:25AM -0700, marcel.taeumel wrote:
> Hi, there!
>
> Is it okay that there is an endless recursion when evaluating "String new: -1"?

No, it is not okay. It should fail with a primitive failure.

Dave


>
> ...
> ByteString class(Behavior)>>handleFailingFailingBasicNew:
> ByteString class(Behavior)>>handleFailingBasicNew:
> ByteString class(Behavior)>>basicNew:
> ByteString class(Behavior)>>handleFailingFailingBasicNew:
> ByteString class(Behavior)>>handleFailingBasicNew:
> ByteString class(Behavior)>>basicNew:
> ByteString class(Behavior)>>handleFailingFailingBasicNew:
> ByteString class(Behavior)>>handleFailingBasicNew:
> ByteString class(Behavior)>>basicNew:
> ...
>
> I would like to have an error signaled instead. Note that the -1 is just an
> example for a bad computation. The error I get is "Space is low" then. :-)
>
>
> Best,
> Marcel
>
>
>
> --
> View this message in context: http://forum.world.st/Endless-recursion-String-new-1-tp4905179.html
> Sent from the Squeak - Dev mailing list archive at Nabble.com.

Reply | Threaded
Open this post in threaded view
|

Re: Endless recursion: "String new: -1"

Levente Uzonyi
Someone seems to have trimmed the versions in the changes file. In Squeak
4.4 Behavior >> #basicNew: had the following body:

  <primitive: 71>
  self isVariable ifFalse:
  [self error: self printString, ' cannot have variable sized instances'].
  (sizeRequested isInteger and: [sizeRequested >= 0]) ifTrue:
  ["arg okay; space must be low."
  OutOfMemory signal.
  ^ self basicNew: sizeRequested  "retry if user proceeds"].
  self primitiveFailed

So, non-integer and negative arguments were primitive failures.

Levente


On Wed, 6 Jul 2016, David T. Lewis wrote:

> On Wed, Jul 06, 2016 at 06:43:25AM -0700, marcel.taeumel wrote:
>> Hi, there!
>>
>> Is it okay that there is an endless recursion when evaluating "String new: -1"?
>
> No, it is not okay. It should fail with a primitive failure.
>
> Dave
>
>
>>
>> ...
>> ByteString class(Behavior)>>handleFailingFailingBasicNew:
>> ByteString class(Behavior)>>handleFailingBasicNew:
>> ByteString class(Behavior)>>basicNew:
>> ByteString class(Behavior)>>handleFailingFailingBasicNew:
>> ByteString class(Behavior)>>handleFailingBasicNew:
>> ByteString class(Behavior)>>basicNew:
>> ByteString class(Behavior)>>handleFailingFailingBasicNew:
>> ByteString class(Behavior)>>handleFailingBasicNew:
>> ByteString class(Behavior)>>basicNew:
>> ...
>>
>> I would like to have an error signaled instead. Note that the -1 is just an
>> example for a bad computation. The error I get is "Space is low" then. :-)
>>
>>
>> Best,
>> Marcel
>>
>>
>>
>> --
>> View this message in context: http://forum.world.st/Endless-recursion-String-new-1-tp4905179.html
>> Sent from the Squeak - Dev mailing list archive at Nabble.com.
>
>

Reply | Threaded
Open this post in threaded view
|

Re: Endless recursion: "String new: -1"

David T. Lewis
I think the problem is in the primitive error code checking. The primitive
is failing with #'bad argument' but the fallback code attempts to handle it
as #'insufficient object memory'. It then tries to free some memory, fails
to correct the problem, and raises a "Space is low" notifier.

Dave


On Thu, Jul 07, 2016 at 09:23:14AM +0200, Levente Uzonyi wrote:

> Someone seems to have trimmed the versions in the changes file. In Squeak
> 4.4 Behavior >> #basicNew: had the following body:
>
> <primitive: 71>
> self isVariable ifFalse:
> [self error: self printString, ' cannot have variable sized
> instances'].
> (sizeRequested isInteger and: [sizeRequested >= 0]) ifTrue:
> ["arg okay; space must be low."
> OutOfMemory signal.
> ^ self basicNew: sizeRequested  "retry if user proceeds"].
> self primitiveFailed
>
> So, non-integer and negative arguments were primitive failures.
>
> Levente
>
>
> On Wed, 6 Jul 2016, David T. Lewis wrote:
>
> >On Wed, Jul 06, 2016 at 06:43:25AM -0700, marcel.taeumel wrote:
> >>Hi, there!
> >>
> >>Is it okay that there is an endless recursion when evaluating "String
> >>new: -1"?
> >
> >No, it is not okay. It should fail with a primitive failure.
> >
> >Dave
> >
> >
> >>
> >>...
> >>ByteString class(Behavior)>>handleFailingFailingBasicNew:
> >>ByteString class(Behavior)>>handleFailingBasicNew:
> >>ByteString class(Behavior)>>basicNew:
> >>ByteString class(Behavior)>>handleFailingFailingBasicNew:
> >>ByteString class(Behavior)>>handleFailingBasicNew:
> >>ByteString class(Behavior)>>basicNew:
> >>ByteString class(Behavior)>>handleFailingFailingBasicNew:
> >>ByteString class(Behavior)>>handleFailingBasicNew:
> >>ByteString class(Behavior)>>basicNew:
> >>...
> >>
> >>I would like to have an error signaled instead. Note that the -1 is just
> >>an
> >>example for a bad computation. The error I get is "Space is low" then. :-)
> >>
> >>
> >>Best,
> >>Marcel
> >>
> >>
> >>
> >>--
> >>View this message in context:
> >>http://forum.world.st/Endless-recursion-String-new-1-tp4905179.html
> >>Sent from the Squeak - Dev mailing list archive at Nabble.com.
> >
> >

Reply | Threaded
Open this post in threaded view
|

Re: Endless recursion: "String new: -1"

Tobias Pape
Hi all

(cc vm-dev)
On 07.07.2016, at 14:28, David T. Lewis <[hidden email]> wrote:

> I think the problem is in the primitive error code checking. The primitive
> is failing with #'bad argument' but the fallback code attempts to handle it
> as #'insufficient object memory'. It then tries to free some memory, fails
> to correct the problem, and raises a "Space is low" notifier.
>

I noted that when we moved to Spur initially and I tried to fix tests.
The AllocationTest failed, and I changed

        ec == #'insufficient object memory' ifTrue:

to
        (ec == #'insufficient object memory' or: [ec == #'bad argument']) ifTrue:

in Behavior>>#basicNew:

Maybe that was an error?

@Eliot, why does Spur return #'bad argument' instead of #'insufficient object memory' when
too much memory is to be allocated?

Best regards
        -Tobias


> Dave
>
>
> On Thu, Jul 07, 2016 at 09:23:14AM +0200, Levente Uzonyi wrote:
>> Someone seems to have trimmed the versions in the changes file. In Squeak
>> 4.4 Behavior >> #basicNew: had the following body:
>>
>> <primitive: 71>
>> self isVariable ifFalse:
>> [self error: self printString, ' cannot have variable sized
>> instances'].
>> (sizeRequested isInteger and: [sizeRequested >= 0]) ifTrue:
>> ["arg okay; space must be low."
>> OutOfMemory signal.
>> ^ self basicNew: sizeRequested  "retry if user proceeds"].
>> self primitiveFailed
>>
>> So, non-integer and negative arguments were primitive failures.
>>
>> Levente
>>
>>
>> On Wed, 6 Jul 2016, David T. Lewis wrote:
>>
>>> On Wed, Jul 06, 2016 at 06:43:25AM -0700, marcel.taeumel wrote:
>>>> Hi, there!
>>>>
>>>> Is it okay that there is an endless recursion when evaluating "String
>>>> new: -1"?
>>>
>>> No, it is not okay. It should fail with a primitive failure.
>>>
>>> Dave
>>>
>>>
>>>>
>>>> ...
>>>> ByteString class(Behavior)>>handleFailingFailingBasicNew:
>>>> ByteString class(Behavior)>>handleFailingBasicNew:
>>>> ByteString class(Behavior)>>basicNew:
>>>> ByteString class(Behavior)>>handleFailingFailingBasicNew:
>>>> ByteString class(Behavior)>>handleFailingBasicNew:
>>>> ByteString class(Behavior)>>basicNew:
>>>> ByteString class(Behavior)>>handleFailingFailingBasicNew:
>>>> ByteString class(Behavior)>>handleFailingBasicNew:
>>>> ByteString class(Behavior)>>basicNew:
>>>> ...
>>>>
>>>> I would like to have an error signaled instead. Note that the -1 is just
>>>> an
>>>> example for a bad computation. The error I get is "Space is low" then. :-)
>>>>
>>>>
>>>> Best,
>>>> Marcel
>>>>
>>>>
>>>>
>>>> --
>>>> View this message in context:
>>>> http://forum.world.st/Endless-recursion-String-new-1-tp4905179.html
>>>> Sent from the Squeak - Dev mailing list archive at Nabble.com.



Reply | Threaded
Open this post in threaded view
|

Re: [Vm-dev] Re: [squeak-dev] Endless recursion: "String new: -1"

Eliot Miranda-2


On Thu, Jul 7, 2016 at 5:42 AM, Tobias Pape <[hidden email]> wrote:

Hi all

(cc vm-dev)
On 07.07.2016, at 14:28, David T. Lewis <[hidden email]> wrote:

> I think the problem is in the primitive error code checking. The primitive
> is failing with #'bad argument' but the fallback code attempts to handle it
> as #'insufficient object memory'. It then tries to free some memory, fails
> to correct the problem, and raises a "Space is low" notifier.
>

I noted that when we moved to Spur initially and I tried to fix tests.
The AllocationTest failed, and I changed

        ec == #'insufficient object memory' ifTrue:

to
        (ec == #'insufficient object memory' or: [ec == #'bad argument']) ifTrue:

in Behavior>>#basicNew:

Maybe that was an error?

@Eliot, why does Spur return #'bad argument' instead of #'insufficient object memory' when
too much memory is to be allocated?

If it does, there's a bug.  I'll go look.


Best regards
        -Tobias


> Dave
>
>
> On Thu, Jul 07, 2016 at 09:23:14AM +0200, Levente Uzonyi wrote:
>> Someone seems to have trimmed the versions in the changes file. In Squeak
>> 4.4 Behavior >> #basicNew: had the following body:
>>
>>      <primitive: 71>
>>      self isVariable ifFalse:
>>              [self error: self printString, ' cannot have variable sized
>>              instances'].
>>      (sizeRequested isInteger and: [sizeRequested >= 0]) ifTrue:
>>              ["arg okay; space must be low."
>>              OutOfMemory signal.
>>              ^ self basicNew: sizeRequested  "retry if user proceeds"].
>>      self primitiveFailed
>>
>> So, non-integer and negative arguments were primitive failures.
>>
>> Levente
>>
>>
>> On Wed, 6 Jul 2016, David T. Lewis wrote:
>>
>>> On Wed, Jul 06, 2016 at 06:43:25AM -0700, marcel.taeumel wrote:
>>>> Hi, there!
>>>>
>>>> Is it okay that there is an endless recursion when evaluating "String
>>>> new: -1"?
>>>
>>> No, it is not okay. It should fail with a primitive failure.
>>>
>>> Dave
>>>
>>>
>>>>
>>>> ...
>>>> ByteString class(Behavior)>>handleFailingFailingBasicNew:
>>>> ByteString class(Behavior)>>handleFailingBasicNew:
>>>> ByteString class(Behavior)>>basicNew:
>>>> ByteString class(Behavior)>>handleFailingFailingBasicNew:
>>>> ByteString class(Behavior)>>handleFailingBasicNew:
>>>> ByteString class(Behavior)>>basicNew:
>>>> ByteString class(Behavior)>>handleFailingFailingBasicNew:
>>>> ByteString class(Behavior)>>handleFailingBasicNew:
>>>> ByteString class(Behavior)>>basicNew:
>>>> ...
>>>>
>>>> I would like to have an error signaled instead. Note that the -1 is just
>>>> an
>>>> example for a bad computation. The error I get is "Space is low" then. :-)
>>>>
>>>>
>>>> Best,
>>>> Marcel
>>>>
>>>>
>>>>
>>>> --
>>>> View this message in context:
>>>> http://forum.world.st/Endless-recursion-String-new-1-tp4905179.html
>>>> Sent from the Squeak - Dev mailing list archive at Nabble.com.





--
_,,,^..^,,,_
best, Eliot


Reply | Threaded
Open this post in threaded view
|

Re: [Vm-dev] Re: [squeak-dev] Endless recursion: "String new: -1"

Eliot Miranda-2
In reply to this post by Tobias Pape


On Thu, Jul 7, 2016 at 5:42 AM, Tobias Pape <[hidden email]> wrote:

Hi all

(cc vm-dev)
On 07.07.2016, at 14:28, David T. Lewis <[hidden email]> wrote:

> I think the problem is in the primitive error code checking. The primitive
> is failing with #'bad argument' but the fallback code attempts to handle it
> as #'insufficient object memory'. It then tries to free some memory, fails
> to correct the problem, and raises a "Space is low" notifier.
>

I noted that when we moved to Spur initially and I tried to fix tests.
The AllocationTest failed, and I changed

        ec == #'insufficient object memory' ifTrue:

to
        (ec == #'insufficient object memory' or: [ec == #'bad argument']) ifTrue:

in Behavior>>#basicNew:

Maybe that was an error?

@Eliot, why does Spur return #'bad argument' instead of #'insufficient object memory' when
too much memory is to be allocated?

It doesn't.  It answers bad argument for anything other than an integer in the range 0 to 2^32-1 or 0 to 2^64-1.  I think your commit of topa 10/7/2015 20:41 for Behavior>>basicNew: is wrong, and should be reverted.


Best regards
        -Tobias


> Dave
>
>
> On Thu, Jul 07, 2016 at 09:23:14AM +0200, Levente Uzonyi wrote:
>> Someone seems to have trimmed the versions in the changes file. In Squeak
>> 4.4 Behavior >> #basicNew: had the following body:
>>
>>      <primitive: 71>
>>      self isVariable ifFalse:
>>              [self error: self printString, ' cannot have variable sized
>>              instances'].
>>      (sizeRequested isInteger and: [sizeRequested >= 0]) ifTrue:
>>              ["arg okay; space must be low."
>>              OutOfMemory signal.
>>              ^ self basicNew: sizeRequested  "retry if user proceeds"].
>>      self primitiveFailed
>>
>> So, non-integer and negative arguments were primitive failures.
>>
>> Levente
>>
>>
>> On Wed, 6 Jul 2016, David T. Lewis wrote:
>>
>>> On Wed, Jul 06, 2016 at 06:43:25AM -0700, marcel.taeumel wrote:
>>>> Hi, there!
>>>>
>>>> Is it okay that there is an endless recursion when evaluating "String
>>>> new: -1"?
>>>
>>> No, it is not okay. It should fail with a primitive failure.
>>>
>>> Dave
>>>
>>>
>>>>
>>>> ...
>>>> ByteString class(Behavior)>>handleFailingFailingBasicNew:
>>>> ByteString class(Behavior)>>handleFailingBasicNew:
>>>> ByteString class(Behavior)>>basicNew:
>>>> ByteString class(Behavior)>>handleFailingFailingBasicNew:
>>>> ByteString class(Behavior)>>handleFailingBasicNew:
>>>> ByteString class(Behavior)>>basicNew:
>>>> ByteString class(Behavior)>>handleFailingFailingBasicNew:
>>>> ByteString class(Behavior)>>handleFailingBasicNew:
>>>> ByteString class(Behavior)>>basicNew:
>>>> ...
>>>>
>>>> I would like to have an error signaled instead. Note that the -1 is just
>>>> an
>>>> example for a bad computation. The error I get is "Space is low" then. :-)
>>>>
>>>>
>>>> Best,
>>>> Marcel
>>>>
>>>>
>>>>
>>>> --
>>>> View this message in context:
>>>> http://forum.world.st/Endless-recursion-String-new-1-tp4905179.html
>>>> Sent from the Squeak - Dev mailing list archive at Nabble.com.





--
_,,,^..^,,,_
best, Eliot