Lines Matching defs:rsi

367 	script_info_t *rsi;
374 module->rsi = NULL;
382 rsi = (script_info_t *)rcmscript_calloc(1, sizeof (script_info_t));
383 rsi->script_full_name = (char *)rcmscript_calloc(1, len);
385 rsi->module = module;
386 rcm_init_queue(&rsi->drreq_q);
388 (void) mutex_init(&rsi->channel_lock, USYNC_THREAD, NULL);
390 (void) snprintf(rsi->script_full_name, len, "%s%s", script_path,
392 rsi->script_name = strrchr(rsi->script_full_name, '/') + 1;
394 (void) mutex_lock(&rsi->channel_lock);
396 rsi->cmd_timeout = -1; /* don't time scriptinfo command */
397 if (do_script_info(rsi) == RCM_SUCCESS) {
402 if (rsi->cmd_timeout == -1)
403 rsi->cmd_timeout = SCRIPT_CMD_TIMEOUT;
404 (void) mutex_unlock(&rsi->channel_lock);
406 /* put rsi on script_info_q */
408 rcm_enqueue_tail(&script_info_q, &rsi->queue);
411 module->rsi = rsi;
415 (void) mutex_unlock(&rsi->channel_lock);
417 free(rsi->script_full_name);
418 free(rsi);
430 script_info_t *rsi = module->rsi;
433 rsi->script_name);
434 return (rsi->func_info_buf);
445 script_info_t *rsi = module->rsi;
448 rsi->script_name);
450 /* remove rsi from script_info_q */
452 rcm_dequeue(&rsi->queue);
455 remove_drreq_all(rsi);
457 if (rsi->func_info_buf)
458 free(rsi->func_info_buf);
460 free(rsi->script_full_name);
461 free(rsi);
463 module->rsi = NULL;
880 run_script(script_info_t *rsi, char *argv[], char *envp[], char **errmsg)
887 rsi->script_full_name);
896 if (stat(rsi->script_full_name, &stats) != 0)
922 if ((p1 = pipe(rsi->pipe1)) == -1 || (p2 = pipe(rsi->pipe2)) == -1) {
932 if ((p1 = pipe(rsi->pipe1)) == -1)
935 if ((p2 = pipe(rsi->pipe2)) == -1)
942 if ((rsi->pid = fork1()) == (pid_t)-1) {
949 if (rsi->pid == 0) {
963 (void) dup2(rsi->pipe1[CHILD_END_OF_PIPE], 1);
964 (void) dup2(rsi->pipe2[CHILD_END_OF_PIPE], 2);
991 (void) execve(rsi->script_full_name, argv, envp);
996 (void) close(rsi->pipe1[CHILD_END_OF_PIPE]);
997 (void) close(rsi->pipe2[CHILD_END_OF_PIPE]);
999 script_ps_state_file_add_entry(rsi->pid, rsi->script_name);
1005 rsi->script_name, strerror(errno));
1008 (void) close(rsi->pipe1[PARENT_END_OF_PIPE]);
1009 (void) close(rsi->pipe1[CHILD_END_OF_PIPE]);
1013 (void) close(rsi->pipe2[PARENT_END_OF_PIPE]);
1014 (void) close(rsi->pipe2[CHILD_END_OF_PIPE]);
1117 script_exited(script_info_t *rsi)
1119 if (rsi->flags & STDERR_THREAD_CREATED) {
1121 "script_exited: doing thr_join (%s)\n", rsi->script_name);
1122 (void) thr_join(rsi->tid, NULL, NULL);
1123 rsi->flags &= ~STDERR_THREAD_CREATED;
1126 (void) close(rsi->pipe1[PARENT_END_OF_PIPE]);
1127 (void) close(rsi->pipe2[PARENT_END_OF_PIPE]);
1128 rsi->pipe1[PARENT_END_OF_PIPE] = -1;
1129 rsi->pipe2[PARENT_END_OF_PIPE] = -1;
1131 script_ps_state_file_remove_entry(rsi->pid);
1132 rsi->pid = 0;
1168 kill_script(script_info_t *rsi)
1170 if (rsi->pid > 1) {
1171 (void) kill_pid(rsi->pid);
1172 script_exited(rsi);
1173 remove_drreq_all(rsi);
1192 fill_argv(script_info_t *rsi, char *argv[], char *resource_name)
1194 argv[0] = rsi->script_full_name;
1195 argv[1] = script_cmd_name[rsi->cmd];
1209 read_stderr(script_info_t *rsi)
1215 while ((get_line(rsi->pipe2[PARENT_END_OF_PIPE], "stderr",
1217 log_msg(rsi, RCM_ERROR, buf);
1221 log_msg(rsi, RCM_ERROR, buf);
1228 process_dataitem(script_info_t *rsi, int token, char *value, char **errmsg)
1240 if (rsi->cmd != C_SCRIPTINFO)
1249 rsi->ver = atoi(value);
1256 if (rsi->cmd != C_SCRIPTINFO)
1259 rcmscript_snprintf(&rsi->func_info_buf,
1260 &rsi->func_info_buf_len,
1261 &rsi->func_info_buf_curptr,
1266 if (rsi->cmd != C_SCRIPTINFO)
1275 rsi->cmd_timeout = atoi(value);
1281 if (rsi->cmd != C_REGISTER)
1285 status = rcm_register_capacity(rsi->hdl, value,
1288 status = rcm_register_interest(rsi->hdl, value, 0,
1296 rsi->script_name, value);
1299 remove_from_unregister(rsi, value);
1303 if (rsi->cmd != C_RESOURCEINFO)
1306 rcmscript_snprintf(&rsi->resource_usage_info_buf,
1307 &rsi->resource_usage_info_buf_len,
1308 &rsi->resource_usage_info_buf_curptr,
1313 rcmscript_snprintf(&rsi->failure_reason_buf,
1314 &rsi->failure_reason_buf_len,
1315 &rsi->failure_reason_buf_curptr,
1326 *errmsg = dup_err(RCM_ERROR, MS_PROTOCOL_ERR, rsi->script_name);
1332 do_cmd(script_info_t *rsi, char *argv[], char *envp[], char **errmsg)
1343 int cmd_timeout = rsi->cmd_timeout;
1349 if (run_script(rsi, argv, envp, errmsg) == -1) {
1354 (void) time(&rsi->lastrun);
1355 deadline = rsi->lastrun + cmd_timeout;
1357 if (thr_create(NULL, 0, (void *(*)(void *))read_stderr, rsi,
1358 0, &rsi->tid) != 0) {
1363 rsi->flags |= STDERR_THREAD_CREATED;
1374 rval = get_line(rsi->pipe1[PARENT_END_OF_PIPE],
1380 log_msg(rsi, loglevel, buf);
1414 log_msg(rsi, loglevel, value);
1424 if (process_dataitem(rsi, token,
1434 if (waitpid(rsi->pid, &child_status, 0)
1435 != rsi->pid) {
1439 rsi->script_name, strerror(errno));
1444 script_exited(rsi);
1445 rsi->exit_status = WEXITSTATUS(child_status);
1449 MS_TIMEOUT_ERR, rsi->script_name);
1452 MS_UNKNOWN_ERR, rsi->script_name);
1455 (void) kill(-(rsi->pid), SIGKILL);
1456 script_exited(rsi);
1465 rsi->script_name, strerror(errno));
1473 (void) kill(rsi->pid, SIGABRT);
1479 MS_TIMEOUT_ERR, rsi->script_name);
1488 *errmsg = dup_err(RCM_ERROR, MS_PROTOCOL_ERR, rsi->script_name);
1491 kill_script(rsi);
1498 do_script_info(script_info_t *rsi)
1506 rsi->script_name);
1508 rsi->cmd = C_SCRIPTINFO;
1509 rsi->func_info_buf = NULL;
1510 rsi->failure_reason_buf = NULL;
1511 fill_argv(rsi, argv, NULL);
1513 if (do_cmd(rsi, argv, script_env, &errmsg) == 0) {
1514 switch (rsi->exit_status) {
1516 if (rsi->func_info_buf != NULL &&
1517 rsi->failure_reason_buf == NULL) {
1519 if (rsi->ver >= SCRIPT_API_MIN_VER &&
1520 rsi->ver <= SCRIPT_API_MAX_VER)
1524 MS_UNSUPPORTED_VER, rsi->script_name,
1525 rsi->ver);
1531 if (rsi->failure_reason_buf != NULL) {
1533 rsi->script_name,
1534 rsi->failure_reason_buf);
1545 rsi->script_name);
1549 if (status != RCM_SUCCESS && rsi->func_info_buf != NULL)
1550 free(rsi->func_info_buf);
1552 if (rsi->failure_reason_buf)
1553 free(rsi->failure_reason_buf);
1559 do_dr(script_info_t *rsi, char *argv[], char *envp[], char **info)
1564 rsi->failure_reason_buf = NULL;
1566 if (do_cmd(rsi, argv, envp, info) == 0) {
1567 switch (rsi->exit_status) {
1570 if (rsi->failure_reason_buf == NULL)
1578 if (rsi->failure_reason_buf != NULL) {
1579 *info = rsi->failure_reason_buf;
1580 rsi->failure_reason_buf = NULL;
1592 rsi->script_name);
1595 if (rsi->failure_reason_buf)
1596 free(rsi->failure_reason_buf);
1615 script_info_t *rsi = hdl->module->rsi;
1626 (void) mutex_lock(&rsi->channel_lock);
1628 rsi->hdl = hdl;
1629 rsi->cmd = C_RESOURCEINFO;
1630 rsi->resource_usage_info_buf = NULL;
1631 rsi->failure_reason_buf = NULL;
1632 fill_argv(rsi, argv, resource_name);
1634 if (do_cmd(rsi, argv, script_env, error) == 0) {
1635 switch (rsi->exit_status) {
1637 if (rsi->resource_usage_info_buf != NULL &&
1638 rsi->failure_reason_buf == NULL) {
1640 *info = rsi->resource_usage_info_buf;
1641 rsi->resource_usage_info_buf = NULL;
1648 if (rsi->failure_reason_buf != NULL) {
1649 *error = rsi->failure_reason_buf;
1650 rsi->failure_reason_buf = NULL;
1661 rsi->script_name);
1664 if (rsi->resource_usage_info_buf)
1665 free(rsi->resource_usage_info_buf);
1667 if (rsi->failure_reason_buf)
1668 free(rsi->failure_reason_buf);
1670 (void) mutex_unlock(&rsi->channel_lock);
1676 add_for_unregister(script_info_t *rsi)
1678 module_t *module = rsi->module;
1696 remove_from_unregister(script_info_t *rsi, char *resource_name)
1698 module_t *module = rsi->module;
1719 complete_unregister(script_info_t *rsi)
1721 module_t *module = rsi->module;
1747 script_info_t *rsi = hdl->module->rsi;
1755 rsi->script_name);
1757 (void) mutex_lock(&rsi->channel_lock);
1759 if (rsi->drreq_q.next != &rsi->drreq_q) {
1761 (void) mutex_unlock(&rsi->channel_lock);
1765 rsi->hdl = hdl;
1766 rsi->cmd = C_REGISTER;
1767 rsi->failure_reason_buf = NULL;
1768 fill_argv(rsi, argv, NULL);
1770 add_for_unregister(rsi);
1772 if (do_cmd(rsi, argv, script_env, &errmsg) == 0) {
1773 switch (rsi->exit_status) {
1779 if (rsi->failure_reason_buf != NULL) {
1781 rsi->script_name,
1782 rsi->failure_reason_buf);
1793 rsi->script_name);
1797 complete_unregister(rsi);
1799 if (rsi->failure_reason_buf)
1800 free(rsi->failure_reason_buf);
1802 (void) mutex_unlock(&rsi->channel_lock);
1811 add_drreq(script_info_t *rsi, char *resource_name)
1813 rcm_queue_t *head = &rsi->drreq_q;
1828 rcm_enqueue_tail(&rsi->drreq_q, &drreq->queue);
1835 remove_drreq(script_info_t *rsi, char *resource_name)
1837 rcm_queue_t *head = &rsi->drreq_q;
1860 remove_drreq_all(script_info_t *rsi)
1864 while (rsi->drreq_q.next != &rsi->drreq_q) {
1866 rsi->drreq_q.next, queue);
1867 remove_drreq(rsi, drreq->resource_name);
1883 script_info_t *rsi = hdl->module->rsi;
1897 (void) mutex_lock(&rsi->channel_lock);
1899 rsi->hdl = hdl;
1900 rsi->cmd = (flag & RCM_QUERY) ? C_QUERYREMOVE : C_PREREMOVE;
1902 if (rsi->cmd == C_PREREMOVE)
1903 add_drreq(rsi, resource_name);
1905 fill_argv(rsi, argv, resource_name);
1912 status = do_dr(rsi, argv, envp, info);
1914 (void) mutex_unlock(&rsi->channel_lock);
1930 script_info_t *rsi = hdl->module->rsi;
1939 (void) mutex_lock(&rsi->channel_lock);
1941 rsi->hdl = hdl;
1942 rsi->cmd = C_UNDOREMOVE;
1943 fill_argv(rsi, argv, resource_name);
1945 status = do_dr(rsi, argv, script_env, info);
1947 remove_drreq(rsi, resource_name);
1949 (void) mutex_unlock(&rsi->channel_lock);
1965 script_info_t *rsi = hdl->module->rsi;
1974 (void) mutex_lock(&rsi->channel_lock);
1976 rsi->hdl = hdl;
1977 rsi->cmd = C_POSTREMOVE;
1978 fill_argv(rsi, argv, resource_name);
1980 status = do_dr(rsi, argv, script_env, info);
1982 remove_drreq(rsi, resource_name);
1984 (void) mutex_unlock(&rsi->channel_lock);
2001 script_info_t *rsi = hdl->module->rsi;
2018 (void) mutex_lock(&rsi->channel_lock);
2020 rsi->hdl = hdl;
2021 rsi->cmd = (flag & RCM_QUERY) ? C_QUERYSUSPEND : C_PRESUSPEND;
2023 if (rsi->cmd == C_PRESUSPEND)
2024 add_drreq(rsi, resource_name);
2026 fill_argv(rsi, argv, resource_name);
2048 status = do_dr(rsi, argv, envp, info);
2050 (void) mutex_unlock(&rsi->channel_lock);
2068 script_info_t *rsi = hdl->module->rsi;
2077 (void) mutex_lock(&rsi->channel_lock);
2079 rsi->hdl = hdl;
2080 rsi->cmd = (flag & RCM_SUSPENDED) ? C_POSTRESUME : C_CANCELSUSPEND;
2081 fill_argv(rsi, argv, resource_name);
2083 status = do_dr(rsi, argv, script_env, info);
2085 remove_drreq(rsi, resource_name);
2087 (void) mutex_unlock(&rsi->channel_lock);
2128 build_env_for_capacity(script_info_t *rsi,
2149 if (rsi->cmd == C_QUERYCAPACITY || rsi->cmd == C_PRECAPACITY)
2158 resource_name, rsi->script_name);
2173 rsi->script_name);
2383 rsi->script_name);
2406 script_info_t *rsi = hdl->module->rsi;
2420 (void) mutex_lock(&rsi->channel_lock);
2422 rsi->hdl = hdl;
2423 rsi->cmd = (flag & RCM_QUERY) ? C_QUERYCAPACITY : C_PRECAPACITY;
2424 fill_argv(rsi, argv, resource_name);
2426 if (build_env_for_capacity(rsi, resource_name, flag,
2429 status = do_dr(rsi, argv, envp, info);
2438 (void) mutex_unlock(&rsi->channel_lock);
2455 script_info_t *rsi = hdl->module->rsi;
2466 (void) mutex_lock(&rsi->channel_lock);
2468 rsi->hdl = hdl;
2469 rsi->cmd = C_POSTCAPACITY;
2470 fill_argv(rsi, argv, resource_name);
2472 if (build_env_for_capacity(rsi, resource_name, flag,
2475 status = do_dr(rsi, argv, envp, info);
2484 (void) mutex_unlock(&rsi->channel_lock);
2490 log_msg(script_info_t *rsi, int level, char *msg)
2492 rcm_log_msg(level, MS_LOG_MSG, rsi->script_name, msg);