RFR 8240902: JDI shared memory connector can use already closed Handles

Patricio Chilano patricio.chilano.mateo at oracle.com
Wed Mar 18 21:48:45 UTC 2020


Hi Dan,

On 3/18/20 5:30 PM, Daniel D. Daugherty wrote:
> On 3/17/20 4:14 PM, Patricio Chilano wrote:
>> Hi all,
>>
>> Please review the following patch:
>>
>> Bug: https://bugs.openjdk.java.net/browse/JDK-8240902
>> Webrev: http://cr.openjdk.java.net/~pchilanomate/8240902/v1/webrev/
>
> src/jdk.jdi/share/native/libdt_shmem/shmemBase.c
>     L411:     int attempts = 10;
>     L420:         sysSleep(200);
>         I presume that this is a 200 millisecond sleep so this new loop
>         will delay a closeStream() call by at most 2 seconds. You may
>         want those literals to be #define'ed values at the top of the
>         file, e.g., like this one:
>
>         #define MAX_GENERATION_RETRIES 20
>
>         Your choice on the names of the new #defines if you choose to
>         do that. You might even consider putting them close to
>         "typedef struct SharedMemoryConnection".
>
>         Update: Oh yuck! Now I see that there is existing code that
>         does the same kind of looping with sysSleep() calls when the
>         linger option is set. I revise my comment: You're following
>         the existing style in the function so go with what you have.
Ok, I left the loop as it is now.

> Don't forget to update the copyright year before you push.
Done.

> L379: closeStream(Stream *stream, jboolean linger, unsigned int 
> *refcount )
>         nit - please delete space before ')'.
Done.

> L412:     MemoryBarrier();     /* Prevent load of refcount to float 
> above. */
>         typo: s/to float/from floating/
After replying to David's review I realized the enterMutex() call on 
closeStream() will already provide acquire semantics so reading the 
refcount will not float above. I removed the barrier.

> L413:     while (attempts>0) {
>         nit - please add spaces around '>'.
Done.

> L415-418, L537, L541, L552:
>         nit - indent should be four spaces instead of two spaces.
Done.

> The existing L546 and L549 should indented four spaces instead
>         of two spaces. Please fix since you there.
Done.

> I'm good with the code changes. I only have nits above so I don't need
> to see another webrev.
Thanks for reviewing this Dan! I might send a v2 later.


Thanks,
Patricio
> Dan
>
>> Calling closeConnection() on an already created/opened connection 
>> includes calls to CloseHandle() on objects that can still be used by 
>> other threads. This can lead to either undefined behavior or, as 
>> detailed in the bug comments, changes of state of unrelated objects. 
>> This issue was found while debugging the reason behind some jshell 
>> test failures seen after pushing 8230594. Not as important, but there 
>> are also calls to closeStream() from createStream()/openStream() when 
>> failing to create/open a stream that will return after executing 
>> "CHECK_ERROR(enterMutex(stream, NULL));" without closing the intended 
>> resources. Then, calling closeConnection() could assert if the reason 
>> of the previous failure was that the stream's mutex failed to be 
>> created/opened. These patch aims to address these issues too.
>>
>> Tested in mach5 with the current baseline, tiers1-3 and several runs 
>> of open/test/langtools/:tier1 which includes the jshell tests where 
>> this connector is used. I also applied patch 
>> http://cr.openjdk.java.net/~pchilanomate/8240902/triggerbug/webrev 
>> mentioned in the comments of the bug, on top of the baseline and run 
>> the langtool tests with and without this fix. Without the fix running 
>> around 30 repetitions already shows failures in tests 
>> jdk/jshell/FailOverExecutionControlTest.java and 
>> jdk/jshell/FailOverExecutionControlHangingLaunchTest.java. With the 
>> fix I run several hundred runs and saw no failures. Let me know if 
>> there is any additional testing I should do.
>>
>> As a side note, I see there are a couple of open issues related with 
>> jshell failures (8209848) which could be related to this bug and 
>> therefore might be fixed by this patch.
>>
>> Thanks,
>> Patricio
>>
>



More information about the serviceability-dev mailing list