From fe3491419b084c2d41ad9f29274325e6c0043856 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Tue, 31 Jan 2012 22:28:18 +0000 Subject: Windows/Visual C++ portability. git-svn-id: http://svn.drobilla.net/zix/trunk@51 df6676b4-ccc9-40e5-b5d6-7c4628a128e3 --- src/ring.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) (limited to 'src/ring.c') diff --git a/src/ring.c b/src/ring.c index fd5133a..7ebbe67 100644 --- a/src/ring.c +++ b/src/ring.c @@ -20,15 +20,25 @@ #ifdef HAVE_MLOCK # include +# define ZIX_MLOCK(ptr, size) mlock((ptr), (size)) +#elif defined(_WIN32) +# include +# define ZIX_MLOCK(ptr, size) VirtualLock((ptr), (size)) +#else +# pragma message("warning: No memory locking, possible RT violations") +# define ZIX_MLOCK(ptr, size) #endif #if defined(__APPLE__) # include # define ZIX_FULL_BARRIER() OSMemoryBarrier() +#elif defined(_WIN32) +# include +# define ZIX_FULL_BARRIER() MemoryBarrier() #elif (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) # define ZIX_FULL_BARRIER() __sync_synchronize() #else -# warning Memory barriers unsupported, possible bugs on SMP systems +# pragma message("warning: No memory barriers, possible SMP bugs") # define ZIX_FULL_BARRIER() #endif @@ -68,7 +78,7 @@ zix_ring_new(uint32_t size) ring->read_head = 0; ring->size = next_power_of_two(size); ring->size_mask = ring->size - 1; - ring->buf = malloc(ring->size); + ring->buf = (char*)malloc(ring->size); return ring; } @@ -82,12 +92,8 @@ zix_ring_free(ZixRing* ring) void zix_ring_mlock(ZixRing* ring) { -#ifdef HAVE_MLOCK - mlock(ring, sizeof(ZixRing)); - mlock(ring->buf, ring->size); -#else -# warning Memory locking (via mlock) unsupported -#endif + ZIX_MLOCK(ring, sizeof(ZixRing)); + ZIX_MLOCK(ring->buf, ring->size); } void -- cgit v1.2.1