/* * Qeury the lease. * Return 1 if succedded, 0 if not , and < 0 on errors. */ int query(int fd, off_t offset) { char curr[taglen+1] = ""; char id[idlen+1] = ""; long long ts; time_t tsec; int tusec; char *t; if (readtag(fd, offset, curr, 0) < 0) return -errno; querytag(curr, id, &ts); tsec = ts / 1000000; tusec = ts % 1000000; t = ctime(&tsec); t[strlen(t)-1] = 0; printf("%s: ID %-*s TS %0*llx (%s, %d usec)\n", sameid(curr, freetag) ? "FREE" : "LOCKED", idlen, id, stamplen, ts, t, tusec); return 1; }
/* * Attempt to acquire the lease. * Return 1 if succedded, 0 if not , and < 0 on errors. */ int acquire(int fd, off_t offset, char *id, int busyloop, long long *ts) { char curr[taglen+1] = "", last[taglen+1] = "", tag[taglen+1] = ""; long backoff_usec = (lease_ms + 6 * op_max_ms) * 1000; long contend_usec = (2 * op_max_ms) * 1000; char dummyid[idlen+1]; if (readtag(fd, offset, curr, 1) < 0) return -errno; settag(last, freetag); do { DEBUG("restart: curr tag is '%s'", curr); if (!sametag(curr, last) && !isfree(curr)) do { DEBUG("backoff: curr tag is '%s'", curr); settag(last, curr); usleep(backoff_usec); if (readtag(fd, offset, curr, 1) < 0) return -errno; } while (busyloop && !sametag(curr, last) && !isfree(curr)); if (!sametag(curr, last) && !isfree(curr)) { DEBUG("fail: curr tag is '%s'", curr); return 0; } DEBUG("contend: curr tag is '%s'", curr); if (writetimestamp(fd, offset, id, tag, ts) < 0) { DEBUG("lost (writetimestamp failed) : curr tag is %s", curr); return -errno; } usleep(contend_usec); if (readtag(fd, offset, curr, 1) < 0) { DEBUG("lost (readtag failed) : curr tag is %s", curr); return -errno; } } while (busyloop && !sametag(curr, tag)); if (busyloop || sametag(curr, tag)) { DEBUG("won : curr tag is %s", curr); querytag(curr, dummyid, ts); return renew(fd, offset, id, ts); } DEBUG("lost : curr tag is %s\n our tag is %s", curr, tag); return 0; }
/* * Attempt to renew the lease. * Return 1 if succeded, 0 if not , and < 0 on errors. */ int renew(int fd, off_t offset, char *id, long long *ts) { char curr[taglen+1] = "", tag[taglen+1] = ""; char dummyid[idlen+1]; struct sigaction sa; long long msleft; int rc = 0; sa.sa_flags = !SA_RESTART; sigemptyset(&sa.sa_mask); sa.sa_handler = handler; if (sigaction(SIGALRM, &sa, NULL) == -1) PANIC("sigaction: can't set alarm"); if (readtag(fd, offset, curr, 0) < 0) { rc = -errno; goto out; } DEBUG("curr tag is '%s'", curr); if (!sameid(curr, id)) { *ts = 0; goto out; } querytag(curr, dummyid, ts); msleft = timeleft_ms(*ts); if (msleft <= 0) { rc = -ETIMEDOUT; goto out; } alarm(msleft / 1000); DEBUG("updating tag: msleft %lld", msleft); if (writetimestamp(fd, offset, id, tag, ts) < 0) { rc = -errno; goto out; } DEBUG("All good"); /* disable the alarm because usleep might use the same signal */ alarm(0); return 1; out: alarm(0); return rc; }
/* * Attempt to release the lease. * Return 1 if succedded, 0 if not , and < 0 on errors. */ int release(int fd, off_t offset, char *id, int force) { char curr[taglen+1] = ""; if (!force) { if (readtag(fd, offset, curr, 0) < 0) return -errno; if (!sameid(curr, id)) return 0; } return writetag(fd, offset, freetag, 0) < 0 ? -1 : 1; }
void gitWithStream (strid_t str, git_uint32 cacheSize, git_uint32 undoSize) { char * game; git_uint32 gamePos; git_uint32 gameSize; git_uint32 remaining; char * ptr; char buffer [4]; glk_stream_set_position (str, 0, seekmode_Start); if (4 != glk_get_buffer_stream (str, buffer, 4)) fatalError ("can't read from game file stream"); if (readtag (buffer) == FORM) { giblorb_result_t result = handleBlorb (str); gamePos = result.data.startpos; gameSize = result.length; } else { gamePos = 0; glk_stream_set_position (str, 0, seekmode_End); gameSize = glk_stream_get_position (str); } game = malloc (gameSize); if (game == NULL) fatalError ("failed to allocate memory to store game file"); glk_stream_set_position (str, gamePos, seekmode_Start); remaining = gameSize; ptr = game; while (remaining > 0) { git_uint32 n = glk_get_buffer_stream (str, ptr, remaining); if (n == 0) fatalError ("failed to read entire game file"); remaining -= n; ptr += n; } gitMain ((git_uint8 *) game, gameSize, cacheSize, undoSize); free (game); }
int read_partdata(FILE *f, FILE *ftag, Slice *s) /* Read one block (128k particles) of data into Slice s. Allocate needed storage, erasing and freeing previous storage. */ /* This cannot be done with s->pid!=NULL, so s->pid is ignored and s->numlist is reset to BLOCKSIZE */ /* Unlike other routines, this stores both positions and velocities in all cases (since the storage requirements are already small */ /* If ftag==NULL, don't read the tag file. Otherwise do read it. */ { if (s->pid!=NULL) mywarn("Non-trivial pid[] not supported with incremental reads"); /* If we need to reallocate memory, do it. Otherwise, just write over */ if (s->px==NULL || s->vx==NULL || s->numlist!=s->numperblock) { if (s->px!=NULL) free_vector(s->px,1,s->numlist); if (s->py!=NULL) free_vector(s->py,1,s->numlist); if (s->pz!=NULL) free_vector(s->pz,1,s->numlist); if (s->vx!=NULL) free_vector(s->vx,1,s->numlist); if (s->vy!=NULL) free_vector(s->vy,1,s->numlist); if (s->vz!=NULL) free_vector(s->vz,1,s->numlist); if (ftag!=NULL && s->ntag!=NULL) free_ivector(s->ntag, 1, s->numlist); s->numlist = s->numperblock; s->px = vector(1,s->numlist); s->py = vector(1,s->numlist); s->pz = vector(1,s->numlist); s->vx = vector(1,s->numlist); s->vy = vector(1,s->numlist); s->vz = vector(1,s->numlist); if (ftag!=NULL) s->ntag = ivector(1, s->numlist); s->offset=0; /* fprintf(stderr, "Reallocating data arrays.\n"); */ } else s->offset+=s->numlist; f77read(f,s->px+1,4*s->numlist); f77read(f,s->py+1,4*s->numlist); f77read(f,s->pz+1,4*s->numlist); f77read(f,s->vx+1,4*s->numlist); f77read(f,s->vy+1,4*s->numlist); f77read(f,s->vz+1,4*s->numlist); if (ftag!=NULL) readtag(ftag, s->numlist, s->ntag); normalizedata(s,1,1); return 0; }
int main() { int i; //EPICS TAG SEARCH //SearchTag(); int clen; // struct sockaddr_in client_addr, server_addr; // char buf[MAXBUF] = "Im server connecting success."; int iSize = 0; //EPICS TAG SEARCH SearchTag(); //make server socket if((ssock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) { perror("Failed to make socket discriptor"); exit(1); } clen = sizeof(client_addr); //setting address structure memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = htonl(INADDR_ANY); server_addr.sin_port = htons(3333); printf("Etos2 Bind Start....\n"); //binding if(bind(ssock, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) { perror("Failed to binding server socket"); exit(1); } printf("Etos2 Bind ok...."); //wait for client if(listen(ssock, 8) <0 ) { perror("listen error : "); exit(1); } char readbuf[MAXBUF]; memset(&readbuf, 0, MAXBUF); i=0; while(1) { iSize = 0; csock = accept(ssock, (struct sockaddr *)&client_addr, &clen); i++; //if(write(csock, buf, MAXBUF) <= 0) // perror("Writing error : "); printf("Start Test!!!!\n"); VacDataRecv(); close(csock); //printf("val : %f\n", fltDATA); iRead = readtag(T_CIP_REAL, VacTagDatachid2[0]); if(iRead == 0) { printf("ETOS2 EPICS TAG RE SEARCH!!!!\n"); SearchTag(); } else { printf("ETOS2 EPICS TAG Read Succes!!!!\n"); } } return 0; }