Esempio n. 1
0
int swFactoryProcess_shutdown(swFactory *factory)
{
	swFactoryProcess *this = factory->object;
	int i;
	//kill all child process
	for (i = 0; i < this->worker_num; i++)
	{
		swTrace("[Main]kill worker processor\n");
		kill(this->workers[i].pid, SIGTERM);
	}

#ifdef SW_USE_SHM_CHAN
	//kill all child process
	for (i = 0; i < this->writer_num; i++)
	{
#if defined(SW_CHAN_USE_MMAP) || SW_CHAN_USE_MMAP==1
		swShareMemory_mmap_free(&this->writers[i].shm);
#else
		swShareMemory_sysv_free(&this->writers[i].shm);
#endif
	}
#endif

	free(this->workers);
	free(this->writers);
	free(this);
	return SW_OK;
}
Esempio n. 2
0
void sw_shm_free(void *ptr)
{
	//object对象在头部,如果释放了错误的对象可能会发生段错误
	swShareMemory *object = ptr - sizeof(swShareMemory);
#ifdef SW_DEBUG
	char check = *(char *)(ptr + object->size); //尝试访问
#endif
	swShareMemory_mmap_free(object);
}