void chain::trigger(){ std::size_t id = generate_id_(id_increase_); std::size_t run = next_run_++; log([this, id](log_base& os){ os << "id(" << id << ") chain '" << modules_[0]->chain << "'"; }, [this, id, run]{ try{ for(std::size_t i = 0; i < modules_.size(); ++i){ modules_[i]->set_id(id); process_module(i, run, [](chain& c, std::size_t i){ c.modules_[i]->trigger(); }, "trigger"); } }catch(...){ // cleanup and unlock all triggers for(std::size_t i = 0; i < ready_run_.size(); ++i){ // Trigger was successful if(ready_run_[i] >= run + 1) continue; process_module(i, run, [id](chain& c, std::size_t i){ c.modules_[i]->cleanup(id); }, "cleanup"); } // rethrow exception throw; } }); }
/* Returns zero on success, non-zero otherwise. */ int uade_song_info(char *info, size_t maxlen, char *filename, enum song_info_type type) { switch (type) { case UADE_MODULE_INFO: return process_module(info, maxlen, filename); #ifndef EMSCRIPTEN case UADE_HEX_DUMP_INFO: return hexdump(info, maxlen, filename, 2048); #endif default: fprintf(stderr, "Illegal info requested.\n"); exit(-1); } return 0; }
int cli_main(int argc, char *argv[]) { int i, work; asl_out_module_t *mod, *m; asl_out_rule_t *r; asl_out_dst_data_t store, *asl_store_dst = NULL; const char *mname = NULL; if (geteuid() != 0) { if (argc == 0) debug = DEBUG_ASL; else debug = DEBUG_STDERR; debug_log(ASL_LEVEL_ERR, "aslmanager must be run by root\n"); exit(1); } module_ttl = DEFAULT_TTL; /* cobble up a dst_data with defaults and parameter settings */ memset(&store, 0, sizeof(store)); store.ttl[LEVEL_ALL] = DEFAULT_TTL; store.all_max = DEFAULT_MAX_SIZE; for (i = 1; i < argc; i++) { if (!strcmp(argv[i], "-s")) { if (((i + 1) < argc) && (argv[i + 1][0] != '-')) { store.path = strdup(argv[++i]); asl_store_dst = &store; } } } /* get parameters from asl.conf */ mod = asl_out_module_init(); if (mod != NULL) { for (r = mod->ruleset; r != NULL; r = r->next) { if ((asl_store_dst == NULL) && (r->action == ACTION_OUT_DEST) && (!strcmp(r->dst->path, PATH_ASL_STORE))) asl_store_dst = r->dst; } for (r = mod->ruleset; r != NULL; r = r->next) { if (r->action == ACTION_SET_PARAM) { if (r->query == NULL) _aslmanager_set_param(asl_store_dst, r->options); } } } work = DO_ASLDB | DO_MODULE; for (i = 1; i < argc; i++) { if (!strcmp(argv[i], "-a")) { if (((i + 1) < argc) && (argv[i + 1][0] != '-')) asl_store_dst->rotate_dir = strdup(argv[++i]); else asl_store_dst->rotate_dir = strdup(PATH_ASL_ARCHIVE); asl_store_dst->mode = 0400; } else if (!strcmp(argv[i], "-store_ttl")) { if (((i + 1) < argc) && (argv[i + 1][0] != '-')) asl_store_dst->ttl[LEVEL_ALL] = atoi(argv[++i]); } else if (!strcmp(argv[i], "-module_ttl")) { if (((i + 1) < argc) && (argv[i + 1][0] != '-')) module_ttl = atoi(argv[++i]); } else if (!strcmp(argv[i], "-ttl")) { if (((i + 1) < argc) && (argv[i + 1][0] != '-')) module_ttl = asl_store_dst->ttl[LEVEL_ALL] = atoi(argv[++i]); } else if (!strcmp(argv[i], "-size")) { if (((i + 1) < argc) && (argv[i + 1][0] != '-')) asl_store_dst->all_max = asl_str_to_size(argv[++i]); } else if (!strcmp(argv[i], "-checkpoint")) { work |= DO_CHECKPT; } else if (!strcmp(argv[i], "-module")) { work &= ~DO_ASLDB; /* optional name follows -module */ if ((i +1) < argc) { if (argv[i + 1][0] != '-') mname = argv[++i]; } } else if (!strcmp(argv[i], "-asldb")) { work = DO_ASLDB; } else if (!strcmp(argv[i], "-d")) { if (((i + i) < argc) && (argv[i+1][0] != '-')) set_debug(DEBUG_STDERR, argv[++i]); else set_debug(DEBUG_STDERR, NULL); } else if (!strcmp(argv[i], "-dd")) { dryrun = 1; if (((i + i) < argc) && (argv[i+1][0] != '-')) set_debug(DEBUG_STDERR, argv[++i]); else set_debug(DEBUG_STDERR, NULL); } } if (asl_store_dst->path == NULL) asl_store_dst->path = strdup(PATH_ASL_STORE); debug_log(ASL_LEVEL_ERR, "aslmanager starting%s\n", (dryrun == 1) ? " dryrun" : ""); if (work & DO_ASLDB) process_asl_data_store(asl_store_dst); if (work & DO_MODULE) { if (work & DO_CHECKPT) checkpoint(mname); if (mod != NULL) { for (m = mod; m != NULL; m = m->next) { if ((mname == NULL) || ((m->name != NULL) && (!strcmp(m->name, mname)))) { process_module(m); } } } } asl_out_module_free(mod); debug_log(ASL_LEVEL_NOTICE, "----------------------------------------\n"); debug_log(ASL_LEVEL_ERR, "aslmanager finished%s\n", (dryrun == 1) ? " dryrun" : ""); if (asl_aux_fd >= 0) asl_close_auxiliary_file(asl_aux_fd); return 0; }