int main(void) { apr_status_t rv; apr_pool_t *pool; apr_shm_t *shm; int recvd; apr_initialize(); if (apr_pool_create(&pool, NULL) != APR_SUCCESS) { exit(-1); } rv = apr_shm_attach(&shm, SHARED_FILENAME, pool); if (rv != APR_SUCCESS) { exit(-2); } boxes = apr_shm_baseaddr_get(shm); /* consume messages on all of the boxes */ recvd = msgwait(30, 0, N_BOXES); /* wait for 30 seconds for messages */ rv = apr_shm_detach(shm); if (rv != APR_SUCCESS) { exit(-3); } return recvd; }
static int shm_detach(lua_State *L) { apr_status_t status; lua_apr_shm *object; object = check_shm(L, 1); status = apr_shm_detach(object->handle); return push_status(L, status); }
bool LLPluginSharedMemory::detach(void) { if(mImpl->mAprSharedMemory) { apr_status_t status = apr_shm_detach(mImpl->mAprSharedMemory); if(ll_apr_warn_status(status)) { // TODO: Is this a fatal error? I think not... } mImpl->mAprSharedMemory = NULL; } return true; }
/* If detach is non-zero, this is a separate child process, * if zero, it is a forked child. */ apr_status_t ap_reopen_scoreboard(apr_pool_t *p, apr_shm_t **shm, int detached) { #if APR_HAS_SHARED_MEMORY if (!detached) { return APR_SUCCESS; } if (apr_shm_size_get(ap_scoreboard_shm) < scoreboard_size) { ap_log_error(APLOG_MARK, APLOG_CRIT, 0, NULL, "Fatal error: shared scoreboard too small for child!"); apr_shm_detach(ap_scoreboard_shm); ap_scoreboard_shm = NULL; return APR_EINVAL; } /* everything will be cleared shortly */ if (*shm) { *shm = ap_scoreboard_shm; } #endif return APR_SUCCESS; }
void server_master_stat_fini(dav_rawx_server_conf *conf, apr_pool_t *plog) { DAV_XDEBUG_POOL(plog, 0, "%s()", __FUNCTION__); if (conf->lock.handle) { DAV_DEBUG_POOL(plog, 0, "%s: Destroying the globalmutex at [%s]", __FUNCTION__, conf->shm.path); if (APR_SUCCESS != apr_global_mutex_destroy(conf->lock.handle)) { DAV_ERROR_POOL(plog, 0, "Failed to destroy the global_mutex"); } conf->lock.handle = NULL; } if (conf->shm.handle) { DAV_DEBUG_POOL(plog, 0, "%s: Detaching the SHM segment at [%s]", __FUNCTION__, conf->shm.path); if (APR_SUCCESS != apr_shm_detach(conf->shm.handle)) { DAV_ERROR_POOL(plog, 0, "Failed to detach the SHM segment"); } conf->shm.handle = NULL; } }
apr_status_t server_child_stat_fini(dav_rawx_server_conf *conf, apr_pool_t *plog) { char buff[256]; apr_status_t rc; DAV_XDEBUG_POOL(plog, 0, "%s()", __FUNCTION__); /* Detaches the segment */ if (conf->shm.handle) { rc = apr_shm_detach(conf->shm.handle); if (APR_SUCCESS != rc) { DAV_ERROR_POOL(plog, 0, "Failed to detach SHM segment at [%s] rc=%d : %s", conf->shm.path, rc, apr_strerror(rc, buff, sizeof(buff))); return rc; } conf->shm.handle = NULL; } DAV_DEBUG_POOL(plog, 0, "%s: SHM segment at [%s] detached", __FUNCTION__, conf->shm.path); return APR_SUCCESS; }