Ejemplo n.º 1
0
Archivo: main.c Proyecto: erikb85/HidaV
int main(int argc, char ** argv)
{
    struct bootconfig bc;
    int ret = -1;

    bc_ll_init( &bc, "/dev/mtd1" );

    if ( argc < 2 ) {
        _print_config( &bc );
        exit(0);
    }

    if ( 0 == strcmp( argv[1], "info" ) ) {
        _print_info( &bc );
        exit(0);
    }

    if ( 0 == strcmp( argv[1], "help" ) ) {
        ret = 0;
    }

    if ( 0 == strcmp( argv[1], "set-kernel-healthy" ) ) {
	_set_kernel_healthy( &bc );
	_print_config( &bc );
        exit(0);
    }
    if ( 0 == strcmp( argv[1], "set-rootfs-healthy" ) ) {
        _set_rootfs_healthy( &bc );
        _print_config( &bc );
        exit(0);
    }

    if ( argc == 3 ) {
        /* TFM TODO / FIXME: this needs refactoring. */
        if ( 0 == strcmp( argv[1], "set-kernel" ) ) {
            _set( &bc, "kernel", argv[2], -2, kernel );
        }

        if ( 0 == strcmp( argv[1], "set-rootfs" ) ) {
            _set( &bc, "rootfs", argv[2], -4, rootfs );
        }
    }

    _print_help();

    return ret;
}
Ejemplo n.º 2
0
Archivo: sdiag.c Proyecto: IFCA/slurm
int main(int argc, char *argv[])
{
	int rc = 0;

	parse_command_line(argc, argv);

	if (sdiag_param == STAT_COMMAND_RESET) {
		req.command_id = STAT_COMMAND_RESET;
		rc = slurm_reset_statistics((stats_info_request_msg_t *)&req);
		if (rc == SLURM_SUCCESS)
			printf("Reset scheduling statistics\n");
		else
			slurm_perror("slurm_reset_statistics");
		exit(rc);
	} else {
		rc = _get_info();
		if (rc == SLURM_SUCCESS)
			rc = _print_info();
	}

	exit(rc);
}
Ejemplo n.º 3
0
//エンキュー
bool logQueue::enqueue(const logPrintInfo& print_info)
{
	const char* message = print_info.message();
	if (!message)//messege が nullptr ならエンキュー成功扱い
		return true;

	//メッセージのバッファ割り当て
	char* queue_message = nullptr;
	const std::size_t queue_message_size = print_info.messageSize() > 0 ? print_info.messageSize() : strlen_fast(message) + 1;
	{
		static const int spin_count = GASHA_ DEFAULT_SPIN_COUNT;
		int spin_count_now = spin_count;
		while (!m_abort.load())
		{
			//一時停止中は何もせずループする
			if (m_pause.load())
			{
				GASHA_ contextSwitch(GASHA_ forceContextSwitch);
				continue;
			}

			//メッセージバッファの割り当て
			queue_message = reinterpret_cast<char*>(m_messageBuff.alloc(queue_message_size));
			if (queue_message || IS_NO_WAIT_MODE)
				break;
			
			//メッセージバッファの割り当てができなければリトライ
			if (spin_count == 1 || (spin_count > 1 && --spin_count_now == 0))
			{
				defaultContextSwitch();
				spin_count_now = spin_count;
			}
		}
		if (!queue_message)
			return false;
		std::memcpy(queue_message, message, queue_message_size);
	}

	//メッセージのエンキュー
	logPrintInfo* info = nullptr;
	{
		const id_type id = print_info.id() > 0 ? print_info.id() : reserve(1);
		static const int spin_count = GASHA_ DEFAULT_SPIN_COUNT;
		int spin_count_now = spin_count;
		while (!m_abort.load())
		{
			//一時停止中は何もせずループする
			if (m_pause.load())
			{
				GASHA_ defaultContextSwitch();
				continue;
			}

			//エンキュー
			logPrintInfo _print_info(print_info);
			_print_info.setId(id);
			_print_info.setMessage(queue_message);
			_print_info.setMessageSize(queue_message_size);
			info = m_queue.push(_print_info);
			if (info || IS_NO_WAIT_MODE)
				break;

			//キューイングできなければリトライ
			if (spin_count == 1 || (spin_count > 1 && --spin_count_now == 0))
			{
				defaultContextSwitch();
				spin_count_now = spin_count;
			}
		}
		//キューイングに失敗したらメッセージを解放して終了
		if (!info)
		{
			m_messageBuff.free(queue_message);
			return false;
		}
	}

	return true;
}