puniverse / quasar

Fibers, Channels and Actors for the JVM
http://docs.paralleluniverse.co/quasar/
Other
4.56k stars 575 forks source link

Problems with Strand.park (minimal example) (jdk1.8.0_121, quasar-0.7.7) #255

Closed fab1an closed 7 years ago

fab1an commented 7 years ago

The following minimal snippet produces the uninstrumented warning at Strand.park:

public static void main(String[] args) throws InterruptedException, ExecutionException, TimeoutException {

    new Fiber<>(() -> Channels.newIntChannel(1).receive())
       .start()
       .join(1, TimeUnit.SECONDS);
}
fab1an commented 7 years ago

Okay, this just came up with 0.7.7, when using 0.7.6 there is no warning.

pron commented 7 years ago

0.7.7 introduced some problems in verifyInstrumentation that were hopefully addressed in 0.7.8. Can you try 0.7.8-SNAPSHOT?

jasons2000 commented 7 years ago

do you have an ETA for 0.7.8 ?

------ Original Message ------ From: "pron" notifications@github.com To: "puniverse/quasar" quasar@noreply.github.com Cc: "Subscribed" subscribed@noreply.github.com Sent: 21/03/2017 14:31:16 Subject: Re: [puniverse/quasar] Problems with Strand.park (minimal example) (jdk1.8.0_121, quasar-0.7.7) (#255)

0.7.7 introduced some problems in verifyInstrumentation that were hopefully addressed in 0.7.8. Can you try 0.7.8-SNAPSHOT?

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/puniverse/quasar/issues/255#issuecomment-288096263, or mute the thread https://github.com/notifications/unsubscribe-auth/AEBVpKaXMlDKiXbRtqC_nwMDtQD_wddaks5rn980gaJpZM4MhdE9.

fab1an commented 7 years ago

I tried 0.7.8-SNAPSHOT two days ago. It still gives the error, but on another line.

circlespainter commented 7 years ago

The problem seems to be here, the call site is IntChannel::receive (as in the bytecode) while the callee according to ExtendedStackTraceElement (hotspot-optimized) is QueueChannel::receive. Neither is assignable to the other one but the receive method is declared in the common ancestor ReceivePort.

A fix should probably check that the relevant method (.receive()Ljava/lang/Object; in this case) is declared in a common ancestor.

jan-zajic commented 7 years ago

We have also many false positive warnings in 0.7.7, so we downgraded to 0.7.6. I try current 0.7.8 today and it's same, still totally useless for us, we can't find real problems in tons of false alarms.