diff options
| author | Roberto De Ioris <info@unbit.it> | 2013-12-10 07:33:45 +0100 |
|---|---|---|
| committer | Roberto De Ioris <info@unbit.it> | 2013-12-10 07:33:45 +0100 |
| commit | 5bb7f02921dbf35d05f776c640c63f6ad3f2d378 (patch) | |
| tree | 123806ff38d846e8f35c3a4db45ba680bc08c4a3 /core/sharedarea.c | |
| parent | 02ee60c6ef4521b5c9320f00ffd606753565f8e4 (diff) | |
| download | uwsgi-5bb7f02921dbf35d05f776c640c63f6ad3f2d378.tar.gz | |
added memoryview wrapper for sharedarea and locking api
Diffstat (limited to 'core/sharedarea.c')
| -rw-r--r-- | core/sharedarea.c | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/core/sharedarea.c b/core/sharedarea.c index 680ed0e4..dcb91d2e 100644 --- a/core/sharedarea.c +++ b/core/sharedarea.c @@ -26,6 +26,28 @@ struct uwsgi_sharedarea *uwsgi_sharedarea_get_by_id(int id, uint64_t pos) { return sa; } +int uwsgi_sharedarea_rlock(int id) { + struct uwsgi_sharedarea *sa = uwsgi_sharedarea_get_by_id(id, 0); + if (!sa) return -1; + uwsgi_rlock(sa->lock); + return 0; +} + +int uwsgi_sharedarea_wlock(int id) { + struct uwsgi_sharedarea *sa = uwsgi_sharedarea_get_by_id(id, 0); + if (!sa) return -1; + uwsgi_wlock(sa->lock); + return 0; +} + +int uwsgi_sharedarea_unlock(int id) { + struct uwsgi_sharedarea *sa = uwsgi_sharedarea_get_by_id(id, 0); + if (!sa) return -1; + uwsgi_rwunlock(sa->lock); + return 0; +} + + int64_t uwsgi_sharedarea_read(int id, uint64_t pos, char *blob, uint64_t len) { struct uwsgi_sharedarea *sa = uwsgi_sharedarea_get_by_id(id, pos); if (!sa) return -1; @@ -51,7 +73,8 @@ int uwsgi_sharedarea_write(int id, uint64_t pos, char *blob, uint64_t len) { } int uwsgi_sharedarea_read64(int id, uint64_t pos, int64_t *value) { - return uwsgi_sharedarea_read(id, pos, (char *) value, 8); + int64_t rlen = uwsgi_sharedarea_read(id, pos, (char *) value, 8); + return rlen == 8 ? 0 : -1; } int uwsgi_sharedarea_write64(int id, uint64_t pos, int64_t *value) { @@ -59,7 +82,8 @@ int uwsgi_sharedarea_write64(int id, uint64_t pos, int64_t *value) { } int uwsgi_sharedarea_read8(int id, uint64_t pos, int8_t *value) { - return uwsgi_sharedarea_read(id, pos, (char *) value, 1); + int64_t rlen = uwsgi_sharedarea_read(id, pos, (char *) value, 1); + return rlen == 1 ? 0 : -1; } int uwsgi_sharedarea_write8(int id, uint64_t pos, int8_t *value) { @@ -67,7 +91,8 @@ int uwsgi_sharedarea_write8(int id, uint64_t pos, int8_t *value) { } int uwsgi_sharedarea_read16(int id, uint64_t pos, int16_t *value) { - return uwsgi_sharedarea_read(id, pos, (char *) value, 2); + int64_t rlen = uwsgi_sharedarea_read(id, pos, (char *) value, 2); + return rlen == 2 ? 0 : -1; } int uwsgi_sharedarea_write16(int id, uint64_t pos, int16_t *value) { @@ -76,7 +101,8 @@ int uwsgi_sharedarea_write16(int id, uint64_t pos, int16_t *value) { int uwsgi_sharedarea_read32(int id, uint64_t pos, int32_t *value) { - return uwsgi_sharedarea_read(id, pos, (char *) value, 4); + int64_t rlen = uwsgi_sharedarea_read(id, pos, (char *) value, 4); + return rlen == 4 ? 0 : -1; } int uwsgi_sharedarea_write32(int id, uint64_t pos, int32_t *value) { |
