RPM

Comment 2 for bug 637219

Revision history for this message
In , Gary (gary-redhat-bugs) wrote :

Description of problem:
The rpmsq.c check for PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL appears to have no effect except to break portability. The default mutex type appears to not matter here, because the mutex type is set in INIT_LOCK macro to PTHREAD_MUTEX_RECURSIVE. In fact, checking for _NORMAL default type conflicts with always setting type to _RECURSIVE.

Note, please disregard Fedora release in this bug report; not sure which Fedora release contains rpm 4.8.0

One possible fix would be to remove lines 16-20 of rpmsq.c. Or to fix this only for HP-UX builds, line 17 could be changed to:

#if !defined(__hpux) && PTHREAD_MUTEX_DEFAULT != PTHREAD_MUTEX_NORMAL

Version-Release number of selected component (if applicable):
rpm 4.8.0

How reproducible:
Compile in HP-UX 11iv2 environment

Steps to Reproduce:
1.
2.
3.

Actual results:
An HP-UX 11iv2 build of rpm 4.8.0 breaks with this msg:
rpmsq.c:18:4: error: #error RPM expects PTHREAD_MUTEX_DEFAULT == PTHREAD_MUTEX_NORMAL

Expected results:
No error during build.

Additional info:
Pertinent rpmsq.c code from rpm 4.8.0:
16 /* XXX suggested in bugzilla #159024 */
17 #if PTHREAD_MUTEX_DEFAULT != PTHREAD_MUTEX_NORMAL
18 #error RPM expects PTHREAD_MUTEX_DEFAULT == PTHREAD_MUTEX_NORMAL
19 #endif
20
21 #ifndef PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
22 static pthread_mutex_t rpmsigTbl_lock = PTHREAD_MUTEX_INITIALIZER;
23 #else
24 static pthread_mutex_t rpmsigTbl_lock = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
25 #endif
26
27 #define DO_LOCK() pthread_mutex_lock(&rpmsigTbl_lock);
28 #define DO_UNLOCK() pthread_mutex_unlock(&rpmsigTbl_lock);
29 #define INIT_LOCK() \
30 { pthread_mutexattr_t attr; \
31 (void) pthread_mutexattr_init(&attr); \
32 (void) pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); \
33 (void) pthread_mutex_init (&rpmsigTbl_lock, &attr); \
34 (void) pthread_mutexattr_destroy(&attr); \
35 rpmsigTbl_sigchld->active = 0; \
36 }