gfarm_error_t gfj_server_unregister(struct peer *peer, gfp_xdr_xid_t xid, size_t *sizep, int from_client, int skip) { char *user = peer_get_username(peer); gfarm_error_t e; gfarm_int32_t error; gfarm_int32_t job_id; static const char diag[] = "GFJ_PROTO_UNREGISTER"; e = gfj_server_get_request(peer, sizep, diag, "i", &job_id); if (e != GFARM_ERR_NO_ERROR) { gflog_debug(GFARM_MSG_1001692, "unregister request failure"); return (e); } if (skip) return (GFARM_ERR_NO_ERROR); if (!from_client) { error = GFARM_ERR_OPERATION_NOT_PERMITTED; gflog_debug(GFARM_MSG_1001693, "operation is not permitted for from_client"); } else { giant_lock(); error = job_table_remove(job_id, user, peer_get_jobs_ref(peer)); giant_unlock(); } return (gfj_server_put_reply(peer, xid, sizep, diag, error, "")); }
int file_table_close(int fd) { static char m1[] = "("; static char m2[] = "@"; static char m3[] = ") disconnected"; char *msg; if (fd < 0 || fd >= file_table_size || file_table[fd].conn == NULL) return (EBADF); /* disconnect, do logging */ msg = malloc(sizeof(m1) - 1 + strlen(file_table[fd].user) + sizeof(m2) - 1 + strlen(file_table[fd].host) + sizeof(m3)); if (msg == NULL) { gflog_notice("(:@not enough memory) disconnected", file_table[fd].user); } else { sprintf(msg, "%s%s%s%s%s", m1, file_table[fd].user, m2, file_table[fd].host, m3); gflog_notice(msg, NULL); free(msg); } while (file_table[fd].jobs != NULL) job_table_remove(file_table[fd].jobs->id, file_table[fd].user, &file_table[fd].jobs); file_table[fd].jobs = NULL; free(file_table[fd].user); file_table[fd].user = NULL; free(file_table[fd].host); file_table[fd].host = NULL; xxx_connection_free(file_table[fd].conn); file_table[fd].conn = NULL; if (fd == file_table_max) { while (--file_table_max >= 0) if (file_table[file_table_max].conn != NULL) break; } return (0); }
char * gfj_server_unregister(int client_socket) { struct xxx_connection *client = file_table[client_socket].conn; char *user = file_table[client_socket].user; char *e; gfarm_int32_t error; gfarm_int32_t job_id; e = gfj_server_get_request(client, "unregister", "i", &job_id); if (e != NULL) return (e); error = job_table_remove(job_id, user, &file_table[client_socket].jobs); return (gfj_server_put_reply(client, "unregister", error, "")); }
gfarm_error_t gfj_server_unregister(struct peer *peer, int from_client, int skip) { char *user = peer_get_username(peer); gfarm_error_t e; gfarm_int32_t error; gfarm_int32_t job_id; e = gfj_server_get_request(peer, "unregister", "i", &job_id); if (e != GFARM_ERR_NO_ERROR) return (e); if (skip) return (GFARM_ERR_NO_ERROR); if (!from_client) { error = GFARM_ERR_OPERATION_NOT_PERMITTED; } else { giant_lock(); error = job_table_remove(job_id, user, peer_get_jobs_ref(peer)); giant_unlock(); } return (gfj_server_put_reply(peer, "unregister", error, "")); }