On 08/18/2012 12:38 AM, Eric Blake wrote: > It's easier to order things in topological order than it is to > forward declare in one file for use only by one other file. > > * tools/virsh.c (vshWatchJob, parseRateStr) > (vshDomainStateToString, vshDomainStateReasonToString) > (vshDomainControlStateToString, vshDomainVcpuStateToString): Drop > useless prototypes. > * tools/virsh-domain.c (vshWatchJob): Move earlier. mechanical code movement and it still compiles; I trust you've got a reasonable plan with where this is going, so ACK. > --- > tools/virsh-domain.c | 180 +++++++++++++++++++++++++-------------------------- > tools/virsh.c | 16 ----- > 2 files changed, 90 insertions(+), 106 deletions(-) > > diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c > index 676c002..dc8620e 100644 > --- a/tools/virsh-domain.c > +++ b/tools/virsh-domain.c > @@ -2772,6 +2772,96 @@ out_sig: > } > > static bool > +vshWatchJob(vshControl *ctl, > + virDomainPtr dom, > + bool verbose, > + int pipe_fd, > + int timeout, > + jobWatchTimeoutFunc timeout_func, > + void *opaque, > + const char *label) > +{ > + struct sigaction sig_action; > + struct sigaction old_sig_action; > + struct pollfd pollfd; > + struct timeval start, curr; > + virDomainJobInfo jobinfo; > + int ret = -1; > + char retchar; > + bool functionReturn = false; > + sigset_t sigmask, oldsigmask; > + > + sigemptyset(&sigmask); > + sigaddset(&sigmask, SIGINT); > + > + intCaught = 0; > + sig_action.sa_sigaction = vshCatchInt; > + sig_action.sa_flags = SA_SIGINFO; > + sigemptyset(&sig_action.sa_mask); > + sigaction(SIGINT, &sig_action, &old_sig_action); > + > + pollfd.fd = pipe_fd; > + pollfd.events = POLLIN; > + pollfd.revents = 0; > + > + GETTIMEOFDAY(&start); > + while (1) { > +repoll: > + ret = poll(&pollfd, 1, 500); > + if (ret > 0) { > + if (pollfd.revents & POLLIN && > + saferead(pipe_fd, &retchar, sizeof(retchar)) > 0 && > + retchar == '0') { > + if (verbose) { > + /* print [100 %] */ > + print_job_progress(label, 0, 1); > + } > + break; > + } > + goto cleanup; > + } > + > + if (ret < 0) { > + if (errno == EINTR) { > + if (intCaught) { > + virDomainAbortJob(dom); > + intCaught = 0; > + } else { > + goto repoll; > + } > + } > + goto cleanup; > + } > + > + GETTIMEOFDAY(&curr); > + if (timeout && (((int)(curr.tv_sec - start.tv_sec) * 1000 + > + (int)(curr.tv_usec - start.tv_usec) / 1000) > > + timeout * 1000)) { > + /* suspend the domain when migration timeouts. */ > + vshDebug(ctl, VSH_ERR_DEBUG, "%s timeout", label); > + if (timeout_func) > + (timeout_func)(ctl, dom, opaque); > + timeout = 0; > + } > + > + if (verbose) { > + pthread_sigmask(SIG_BLOCK, &sigmask, &oldsigmask); > + ret = virDomainGetJobInfo(dom, &jobinfo); > + pthread_sigmask(SIG_SETMASK, &oldsigmask, NULL); > + if (ret == 0) > + print_job_progress(label, jobinfo.dataRemaining, > + jobinfo.dataTotal); > + } > + } > + > + functionReturn = true; > + > +cleanup: > + sigaction(SIGINT, &old_sig_action, NULL); > + return functionReturn; > +} > + > +static bool > cmdSave(vshControl *ctl, const vshCmd *cmd) > { > bool ret = false; > @@ -6426,96 +6516,6 @@ vshMigrationTimeout(vshControl *ctl, > } > > static bool > -vshWatchJob(vshControl *ctl, > - virDomainPtr dom, > - bool verbose, > - int pipe_fd, > - int timeout, > - jobWatchTimeoutFunc timeout_func, > - void *opaque, > - const char *label) > -{ > - struct sigaction sig_action; > - struct sigaction old_sig_action; > - struct pollfd pollfd; > - struct timeval start, curr; > - virDomainJobInfo jobinfo; > - int ret = -1; > - char retchar; > - bool functionReturn = false; > - sigset_t sigmask, oldsigmask; > - > - sigemptyset(&sigmask); > - sigaddset(&sigmask, SIGINT); > - > - intCaught = 0; > - sig_action.sa_sigaction = vshCatchInt; > - sig_action.sa_flags = SA_SIGINFO; > - sigemptyset(&sig_action.sa_mask); > - sigaction(SIGINT, &sig_action, &old_sig_action); > - > - pollfd.fd = pipe_fd; > - pollfd.events = POLLIN; > - pollfd.revents = 0; > - > - GETTIMEOFDAY(&start); > - while (1) { > -repoll: > - ret = poll(&pollfd, 1, 500); > - if (ret > 0) { > - if (pollfd.revents & POLLIN && > - saferead(pipe_fd, &retchar, sizeof(retchar)) > 0 && > - retchar == '0') { > - if (verbose) { > - /* print [100 %] */ > - print_job_progress(label, 0, 1); > - } > - break; > - } > - goto cleanup; > - } > - > - if (ret < 0) { > - if (errno == EINTR) { > - if (intCaught) { > - virDomainAbortJob(dom); > - intCaught = 0; > - } else { > - goto repoll; > - } > - } > - goto cleanup; > - } > - > - GETTIMEOFDAY(&curr); > - if (timeout && (((int)(curr.tv_sec - start.tv_sec) * 1000 + > - (int)(curr.tv_usec - start.tv_usec) / 1000) > > - timeout * 1000)) { > - /* suspend the domain when migration timeouts. */ > - vshDebug(ctl, VSH_ERR_DEBUG, "%s timeout", label); > - if (timeout_func) > - (timeout_func)(ctl, dom, opaque); > - timeout = 0; > - } > - > - if (verbose) { > - pthread_sigmask(SIG_BLOCK, &sigmask, &oldsigmask); > - ret = virDomainGetJobInfo(dom, &jobinfo); > - pthread_sigmask(SIG_SETMASK, &oldsigmask, NULL); > - if (ret == 0) > - print_job_progress(label, jobinfo.dataRemaining, > - jobinfo.dataTotal); > - } > - } > - > - functionReturn = true; > - > -cleanup: > - sigaction(SIGINT, &old_sig_action, NULL); > - return functionReturn; > -} > - > -static bool > cmdMigrate(vshControl *ctl, const vshCmd *cmd) > { > virDomainPtr dom = NULL; > diff --git a/tools/virsh.c b/tools/virsh.c > index 4dff02e..3be2f99 100644 > --- a/tools/virsh.c > +++ b/tools/virsh.c > @@ -361,10 +361,6 @@ static void vshDebug(vshControl *ctl, int level, const char *format, ...) > #define vshStrcasecmp(S1, S2) strcasecmp(S1, S2) > > static int vshDomainState(vshControl *ctl, virDomainPtr dom, int *reason); > -static const char *vshDomainStateToString(int state); > -static const char *vshDomainStateReasonToString(int state, int reason); > -static const char *vshDomainControlStateToString(int state); > -static const char *vshDomainVcpuStateToString(int state); > static bool vshConnectionUsability(vshControl *ctl, virConnectPtr conn); > static virTypedParameterPtr vshFindTypedParamByName(const char *name, > virTypedParameterPtr list, > @@ -389,16 +385,6 @@ typedef struct __vshCtrlData { > typedef void (*jobWatchTimeoutFunc) (vshControl *ctl, virDomainPtr dom, > void *opaque); > > -static bool > -vshWatchJob(vshControl *ctl, > - virDomainPtr dom, > - bool verbose, > - int pipe_fd, > - int timeout, > - jobWatchTimeoutFunc timeout_func, > - void *opaque, > - const char *label); > - > static void *_vshMalloc(vshControl *ctl, size_t sz, const char *filename, int line); > #define vshMalloc(_ctl, _sz) _vshMalloc(_ctl, _sz, __FILE__, __LINE__) > > @@ -408,8 +394,6 @@ static void *_vshCalloc(vshControl *ctl, size_t nmemb, size_t sz, const char *fi > static char *_vshStrdup(vshControl *ctl, const char *s, const char *filename, int line); > #define vshStrdup(_ctl, _s) _vshStrdup(_ctl, _s, __FILE__, __LINE__) > > -static int parseRateStr(const char *rateStr, virNetDevBandwidthRatePtr rate); > - > static void * > _vshMalloc(vshControl *ctl, size_t size, const char *filename, int line) > { -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list