Re: Value types - compatibility with existing “value objects”
Vitaly Davidovich
vitalyd at gmail.com
Fri Jan 9 14:18:54 UTC 2015
And by the way, .NET had a similar problem. What they did was change their
lock APIs to indicate whether the lock was obtained or not using a by-ref
boolean. So your code would now look like (pseudo java code assuming
by-ref passing capability):
boolean locked = false;
try {
lock.lock(ref locked);
} finally {
if (locked) {
lock.unlock();
}
}
This way you can get yourself inside the protected try region when
performing the action.
On Fri, Jan 9, 2015 at 9:14 AM, Vitaly Davidovich <vitalyd at gmail.com> wrote:
> I think some of that true. For example, a lot of lock code looks like:
>
> lock.lock();
> try {
> ...
> } finally {
> lock.unlock();
> }
>
> If the lock implementation causes SOE or OOM as part of lock() and yet
> acquires the lock in the process, then yes, you're hosed. This is a
> quality of implementation issue. Someone can also abort the thread right
> after the lock is acquired but before you enter the try region.
> Thankfully, people are discouraged from doing that and you don't tend to
> see this in the wild.
>
> In terms of finally blocks not being executed, I don't think that's true
> (modulo JVM crashing) if the SOE was thrown from within a try/catch block.
> The JVM intentionally reserves some space at the tail of the stack to leave
> room for itself to initiate unwinding.
>
>
>
>
> On Fri, Jan 9, 2015 at 9:01 AM, Simon Ochsenreither <
> simon at ochsenreither.de> wrote:
>
>> > Worth mentioning that SOE is infinitely more recoverable than heap OOME.
>> > In the latter case (especially with complex systems, where the risk is
>> > ironically even higher of it happening) there's often not much you can
>> > do other than kill off the JVM and try again. But if you run out of
>> > stack, everything should unwind in a very predictable (and fast) manner.
>> > You could even automatically rebuild your thread pools with larger
>> > stack sizes fairly easily.
>>
>> Your VM might be broken after both. SOE is definitely not recoverable.
>> Yes, it might work, but no guarantees it does.
>>
>> Money quote: "You will find occurrences of StackOverflowError leaving
>> locks locked, monitors acquired, and "finally" block not invoked, even
>> if JVM doesn't crash."
>>
>> Maybe things have changed since then?
>>
>
>
More information about the valhalla-dev
mailing list