* limitations under the License.
*/
#include "ssvm.h"
+#include "svm_common.h"
int
ssvm_master_init (ssvm_private_t * ssvm, u32 master_index)
{
+ svm_main_region_t *smr = svm_get_root_rp ()->data_base;
int ssvm_fd;
u8 *ssvm_filename;
u8 junk = 0;
if (ssvm->ssvm_size == 0)
return SSVM_API_ERROR_NO_SIZE;
+ if (CLIB_DEBUG > 1)
+ clib_warning ("[%d] creating segment '%s'", getpid (), ssvm->name);
+
+ ASSERT (vec_c_string_is_terminated (ssvm->name));
ssvm_filename = format (0, "/dev/shm/%s%c", ssvm->name, 0);
unlink ((char *) ssvm_filename);
return SSVM_API_ERROR_CREATE_FAILURE;
}
+ if (fchmod (ssvm_fd, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP) < 0)
+ clib_unix_warning ("ssvm segment chmod");
+ if (fchown (ssvm_fd, smr->uid, smr->gid) < 0)
+ clib_unix_warning ("ssvm segment chown");
+
if (lseek (ssvm_fd, ssvm->ssvm_size, SEEK_SET) < 0)
{
clib_unix_warning ("lseek");
int ssvm_fd = -1;
ssvm_shared_header_t *sh;
+ ASSERT (vec_c_string_is_terminated (ssvm->name));
ssvm->i_am_master = 0;
while (timeout_in_seconds-- > 0)
return 0;
}
+void
+ssvm_delete (ssvm_private_t * ssvm)
+{
+ u8 *fn;
+
+ fn = format (0, "/dev/shm/%s%c", ssvm->name, 0);
+
+ if (CLIB_DEBUG > 1)
+ clib_warning ("[%d] unlinking ssvm (%s) backing file '%s'", getpid (),
+ ssvm->name, fn);
+
+ /* Throw away the backing file */
+ if (unlink ((char *) fn) < 0)
+ clib_unix_warning ("unlink segment '%s'", ssvm->name);
+
+ vec_free (fn);
+ vec_free (ssvm->name);
+
+ munmap ((void *) ssvm->requested_va, ssvm->ssvm_size);
+}
+
+
/*
* fd.io coding-style-patch-verification: ON
*