int start_zookeeper(view* cur_view, int *zfd, pthread_mutex_t *lock) { int rc; char zoo_host_port[32]; sprintf(zoo_host_port, "localhost:%d", zoo_port); zh = zookeeper_init(zoo_host_port, zookeeper_init_watcher, 15000, 0, 0, 0); while(is_connected != 1); int interest, fd; struct timeval tv; zookeeper_interest(zh, &fd, &interest, &tv); *zfd = fd; char path_buffer[512]; rc = zoo_create(zh, "/election/guid-n_", NULL, -1, &ZOO_OPEN_ACL_UNSAFE, ZOO_SEQUENCE|ZOO_EPHEMERAL, path_buffer, 512); if (rc) { fprintf(stderr, "Error %d for zoo_create\n", rc); } char znode_path[512]; get_znode_path(path_buffer, znode_path); check_leader(cur_view, path_buffer); struct watcherContext *watcherPara = (struct watcherContext *)malloc(sizeof(struct watcherContext)); strcpy(watcherPara->znode_path, znode_path); watcherPara->lock = lock; watcherPara->cur_view = cur_view; rc = zoo_wget_children(zh, "/election", zoo_wget_children_watcher, (void*)watcherPara, NULL); if (rc) { fprintf(stderr, "Error %d for zoo_wget_children\n", rc); } return 0; }
void proc_remove_breakpoint(struct Process *proc, struct breakpoint *bp) { debug(DEBUG_FUNCTION, "proc_remove_breakpoint(pid=%d, %s@%p)", proc->pid, breakpoint_name(bp), bp->addr); check_leader(proc); struct breakpoint *removed = dict_remove(proc->breakpoints, bp->addr); assert(removed == bp); }
void zoo_wget_children_watcher(zhandle_t *wzh, int type, int state, const char *path, void *watcherCtx) { if (type == ZOO_CHILD_EVENT) { int rc; struct watcherContext *watcherPara = (struct watcherContext*)watcherCtx; // block the threads pthread_mutex_lock(watcherPara->lock); rc = zoo_wget_children(zh, "/election", zoo_wget_children_watcher, watcherCtx, NULL); if (rc) { fprintf(stderr, "Error %d for zoo_wget_children\n", rc); } check_leader(watcherPara->cur_view, watcherPara->znode_path); pthread_mutex_unlock(watcherPara->lock); } }
int proc_add_breakpoint(struct Process *proc, struct breakpoint *bp) { debug(DEBUG_FUNCTION, "proc_add_breakpoint(pid=%d, %s@%p)", proc->pid, breakpoint_name(bp), bp->addr); check_leader(proc); /* XXX We might merge bp->libsym instead of the following * assert, but that's not necessary right now. Read the * comment in breakpoint_for_symbol. */ assert(dict_find_entry(proc->breakpoints, bp->addr) == NULL); if (dict_enter(proc->breakpoints, bp->addr, bp) < 0) { fprintf(stderr, "couldn't enter breakpoint %s@%p to dictionary: %s\n", breakpoint_name(bp), bp->addr, strerror(errno)); return -1; } return 0; }