Make sure sval is set before comparing it with self->maxvalue.
Compare only if the return value was zero.
This fixes "ValueError: semaphore or lock released too many times"
which occured only for i686.

--- Modules/_multiprocessing/semaphore.c	2016-12-17 21:05:07.000000000 +0100
+++ Modules/_multiprocessing/semaphore.c	2016-12-31 17:42:30.429238082 +0100
@@ -382,9 +382,10 @@
 
         /* This check is not an absolute guarantee that the semaphore
            does not rise above maxvalue. */
+        int res = sem_getvalue(self->handle, &sval);
-        if (sem_getvalue(self->handle, &sval) < 0) {
+        if (res < 0) {
             return PyErr_SetFromErrno(PyExc_OSError);
-        } else if (sval >= self->maxvalue) {
+        } else if (res == 0 && sval >= self->maxvalue) {
            PyErr_SetString(PyExc_ValueError, "semaphore or lock "
                            "released too many times");
            return NULL;
