RFR(XXS): 8132232: Signature mismatch between declaration and definition of PosixSemaphore::timedwait

Volker Simonis volker.simonis at gmail.com
Thu Jul 23 14:39:10 UTC 2015


can somebody please review and sponsor this tiny change to fix the build on
Solaris/Sparc with SS12u3:


In semaphore_posix.hpp timedwait is declared as follows:

class PosixSemaphore : public CHeapObj<mtInternal> {
  bool timedwait(struct timespec ts);

but in os_posix.cpp it is defined as follows:

bool PosixSemaphore::timedwait(const struct timespec ts) {

On Solaris 10/11 on Sparc with SS12u3 (Sun C++ 5.12 SunOS_sparc 2011/11/16)
this gives an error in the release build:

Undefined first referenced
 symbol in file
bool PosixSemaphore::timedwait(timespec) os_solaris.o

This is because the caller in os_solaris.o requires:

/usr/ccs/bin/nm -C hotspot/solaris_sparcv9_compiler2/product/os_solaris.o |
grep timedwait
[456] | 0| 0|FUNC |GLOB |0 |UNDEF |bool PosixSemaphore::timedwait(timespec)

but the implementation in os_posix.o has:

/usr/ccs/bin/nm -C hotspot/solaris_sparcv9_compiler2/product/os_posix.o |
grep timedwait
[61] | 6928| 124|FUNC |GLOB |0 |2 |bool PosixSemaphore::timedwait(const

Strange enough, the error doesn't seem to happen on Solaris/AMD64 (using
the exactly same compiler version) and I absolutely can not see how this
error is related to the CPU architecture!

I also can not understand why nobody has seen this before? Maybe you
(Oracle) are using a newer compiler where this is fixed? But the "Supported
Build Platforms" wiki page [1] still mentions 12.3.

Fortunately, the fix is trivial - just remove the const qualifier from the
method definition.


[1] https://wiki.openjdk.java.net/display/Build/Supported+Build+Platforms

More information about the hotspot-dev mailing list