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; }
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); }
//エンキュー 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; }