Clojure

Compile.java closes out preventing java from reporting exceptions

Details

  • Type: Defect Defect
  • Status: Closed Closed
  • Priority: Major Major
  • Resolution: Completed
  • Affects Version/s: Release 1.4
  • Fix Version/s: Release 1.5, Release 1.6
  • Component/s: None
  • Labels:
    None
  • Patch:
    Code and Test
  • Approval:
    Ok

Description

Problem: I was trying to compile a project that has some native dependencies (using clojure-maven-plugin version 1.3.13 with Maven 2.0). I forgot to set java.library.path properly so that the native library could be found, and only got an error of

[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Clojure failed.
[INFO] ------------------------------------------------------------------------

Cause: Compile.java flushes and closes RT.out in the finally block. When out is closed it is unable to write out the stack trace for the UnsatisfiedLinkError that was being thrown. This made it very difficult to debug what was happening.

Solution: Flush, but do not close RT.out in Compile/main. Test is included, but may or may not be worth keeping.

Patch: CLJ-1154.patch

Activity

Hide
Stuart Sierra added a comment -

Screened. I confirmed with an independent test, by compiling code which spawned a future which would write to STDOUT:

(ns foo)

(future
  (Thread/sleep 1000)
  (.. System out (println "This is the future of Foo.")))

With or without the patch, creating the future prevents the compile process from terminating, but after the patch the output is visible.

Show
Stuart Sierra added a comment - Screened. I confirmed with an independent test, by compiling code which spawned a future which would write to STDOUT:
(ns foo)

(future
  (Thread/sleep 1000)
  (.. System out (println "This is the future of Foo.")))
With or without the patch, creating the future prevents the compile process from terminating, but after the patch the output is visible.
Hide
Alex Miller added a comment -

Updated description a bit and added a patch. The code change is just to stop closing RT.out in Compile.main. The test to invoke Compile and check the stream has an annoying amount of setup and teardown so it's a bit messy. Would love to have more io facilities available (with managed cleanup)!

Show
Alex Miller added a comment - Updated description a bit and added a patch. The code change is just to stop closing RT.out in Compile.main. The test to invoke Compile and check the stream has an annoying amount of setup and teardown so it's a bit messy. Would love to have more io facilities available (with managed cleanup)!
Hide
Stuart Halloway added a comment -

I have encountered this problem as well. Did not verify the explanation, but sounds reasonable.

Show
Stuart Halloway added a comment - I have encountered this problem as well. Did not verify the explanation, but sounds reasonable.

People

Vote (1)
Watch (1)

Dates

  • Created:
    Updated:
    Resolved: