summaryrefslogtreecommitdiffstats
path: root/src/ring.c
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2012-01-31 22:28:18 +0000
committerDavid Robillard <d@drobilla.net>2012-01-31 22:28:18 +0000
commitfe3491419b084c2d41ad9f29274325e6c0043856 (patch)
treee50dcaea6879029f2a80f3b8884a36620ecea55d /src/ring.c
parent86826ae6733119d462be9f3642161db895756643 (diff)
downloadzix-fe3491419b084c2d41ad9f29274325e6c0043856.tar.gz
zix-fe3491419b084c2d41ad9f29274325e6c0043856.tar.bz2
zix-fe3491419b084c2d41ad9f29274325e6c0043856.zip
Windows/Visual C++ portability.
git-svn-id: http://svn.drobilla.net/zix/trunk@51 df6676b4-ccc9-40e5-b5d6-7c4628a128e3
Diffstat (limited to 'src/ring.c')
-rw-r--r--src/ring.c22
1 files changed, 14 insertions, 8 deletions
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 <sys/mman.h>
+# define ZIX_MLOCK(ptr, size) mlock((ptr), (size))
+#elif defined(_WIN32)
+# include <windows.h>
+# 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 <libkern/OSAtomic.h>
# define ZIX_FULL_BARRIER() OSMemoryBarrier()
+#elif defined(_WIN32)
+# include <windows.h>
+# 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