Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8132232

Signature mismatch between declaration and definition of PosixSemaphore::timedwait

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P4 P4
    • 9
    • 9
    • hotspot
    • None
    • b77

        In semaphore_posix.hpp timedwait is declared as follows:

        class PosixSemaphore : public CHeapObj<mtInternal> {
         private:
          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)
        [__1cOPosixSemaphoreJtimedwait6MnItimespec__b_]

        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 timespec)
        [__1cOPosixSemaphoreJtimedwait6MknItimespec__b_]

        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?

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

              simonis Volker Simonis
              simonis Volker Simonis
              Votes:
              0 Vote for this issue
              Watchers:
              6 Start watching this issue

                Created:
                Updated:
                Resolved: