Skip to content

Commit 428bb16

Browse files
committed
Fix alignment of pthread types on NetBSD
1 parent 318cd84 commit 428bb16

File tree

1 file changed

+19
-11
lines changed

1 file changed

+19
-11
lines changed

src/libstd/sys/unix/sync.rs

+19-11
Original file line numberDiff line numberDiff line change
@@ -254,53 +254,61 @@ mod os {
254254
mod os {
255255
use libc;
256256

257-
// size of the type minus width of the magic int field
257+
// size of the type minus width of the magic and alignment field
258258
#[cfg(target_arch = "x86_64")]
259-
const __PTHREAD_MUTEX_SIZE__: usize = 48 - 4;
259+
const __PTHREAD_MUTEX_SIZE__: usize = 48 - 4 - 8;
260260

261261
#[cfg(target_arch = "x86_64")]
262-
const __PTHREAD_COND_SIZE__: usize = 40 - 4;
262+
const __PTHREAD_MUTEXATTR_SIZE__: usize = 16 - 8; // no magic field
263263

264264
#[cfg(target_arch = "x86_64")]
265-
const __PTHREAD_RWLOCK_SIZE__: usize = 64 - 4;
265+
const __PTHREAD_COND_SIZE__: usize = 40 - 4 - 8;
266+
267+
#[cfg(target_arch = "x86_64")]
268+
const __PTHREAD_RWLOCK_SIZE__: usize = 64 - 4 - 8;
266269

267270
const _PTHREAD_MUTEX_MAGIC_INIT: libc::c_uint = 0x33330003;
268271
const _PTHREAD_COND_MAGIC_INIT: libc::c_uint = 0x55550005;
269272
const _PTHREAD_RWLOCK_MAGIC_INIT: libc::c_uint = 0x99990009;
270273

271-
// note the actual structs are smaller
272-
273-
#[repr(C, packed)]
274+
#[repr(C)]
274275
pub struct pthread_mutex_t {
275276
__magic: libc::c_uint,
276277
__opaque: [u8; __PTHREAD_MUTEX_SIZE__],
278+
__align: libc::c_longlong,
277279
}
278-
#[repr(C, packed)]
280+
#[repr(C)]
279281
pub struct pthread_mutexattr_t {
280-
__opaque: [u8; 16],
282+
__opaque: [u8; __PTHREAD_MUTEXATTR_SIZE__],
283+
__align: libc::c_longlong,
281284
}
282-
#[repr(C, packed)]
285+
#[repr(C)]
283286
pub struct pthread_cond_t {
284287
__magic: libc::c_uint,
285288
__opaque: [u8; __PTHREAD_COND_SIZE__],
289+
__align: libc::c_longlong,
286290
}
287-
#[repr(C, packed)]
291+
#[repr(C)]
288292
pub struct pthread_rwlock_t {
289293
__magic: libc::c_uint,
290294
__opaque: [u8; __PTHREAD_RWLOCK_SIZE__],
295+
__align: libc::c_longlong,
291296
}
292297

293298
pub const PTHREAD_MUTEX_INITIALIZER: pthread_mutex_t = pthread_mutex_t {
294299
__magic: _PTHREAD_MUTEX_MAGIC_INIT,
295300
__opaque: [0; __PTHREAD_MUTEX_SIZE__],
301+
__align: 0,
296302
};
297303
pub const PTHREAD_COND_INITIALIZER: pthread_cond_t = pthread_cond_t {
298304
__magic: _PTHREAD_COND_MAGIC_INIT,
299305
__opaque: [0; __PTHREAD_COND_SIZE__],
306+
__align: 0,
300307
};
301308
pub const PTHREAD_RWLOCK_INITIALIZER: pthread_rwlock_t = pthread_rwlock_t {
302309
__magic: _PTHREAD_RWLOCK_MAGIC_INIT,
303310
__opaque: [0; __PTHREAD_RWLOCK_SIZE__],
311+
__align: 0,
304312
};
305313

306314
pub const PTHREAD_MUTEX_RECURSIVE: libc::c_int = 2;

0 commit comments

Comments
 (0)