diff options
author | Stefan Weil <sw@weilnetz.de> | 2014-06-24 22:52:29 +0200 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2014-07-10 17:06:33 +0200 |
commit | b7bf8f5657d48e4625c86cd5f1d3cc83e830d8f7 (patch) | |
tree | 07db84b4153ad5536fed98f2d4eb7803acebc56c | |
parent | 8248c36a5db6ff7d5f07f05148be0dd0160e650c (diff) |
oslib-posix: Fix new compiler error with -Wclobbered
Newer versions of gcc report a warning (or an error with -Werror) when
compiler option -Wclobbered (or -Wextra) is active:
util/oslib-posix.c:372:12: error:
variable ‘hpagesize’ might be clobbered by ‘longjmp’ or ‘vfork’ [-Werror=clobbered]
The rewritten code fixes this warning: variable 'hpagesize' is now set and
used in a block without any call of sigsetjmp or similar functions.
Signed-off-by: Stefan Weil <sw@weilnetz.de>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
-rw-r--r-- | util/oslib-posix.c | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/util/oslib-posix.c b/util/oslib-posix.c index 1524ead755..cdbfb2e270 100644 --- a/util/oslib-posix.c +++ b/util/oslib-posix.c @@ -366,10 +366,9 @@ static size_t fd_getpagesize(int fd) void os_mem_prealloc(int fd, char *area, size_t memory) { - int ret, i; + int ret; struct sigaction act, oldact; sigset_t set, oldset; - size_t hpagesize = fd_getpagesize(fd); memset(&act, 0, sizeof(act)); act.sa_handler = &sigbus_handler; @@ -389,19 +388,22 @@ void os_mem_prealloc(int fd, char *area, size_t memory) if (sigsetjmp(sigjump, 1)) { fprintf(stderr, "os_mem_prealloc: failed to preallocate pages\n"); exit(1); - } + } else { + int i; + size_t hpagesize = fd_getpagesize(fd); - /* MAP_POPULATE silently ignores failures */ - memory = (memory + hpagesize - 1) & -hpagesize; - for (i = 0; i < (memory/hpagesize); i++) { - memset(area + (hpagesize*i), 0, 1); - } + /* MAP_POPULATE silently ignores failures */ + memory = (memory + hpagesize - 1) & -hpagesize; + for (i = 0; i < (memory / hpagesize); i++) { + memset(area + (hpagesize * i), 0, 1); + } - ret = sigaction(SIGBUS, &oldact, NULL); - if (ret) { - perror("os_mem_prealloc: failed to reinstall signal handler"); - exit(1); - } + ret = sigaction(SIGBUS, &oldact, NULL); + if (ret) { + perror("os_mem_prealloc: failed to reinstall signal handler"); + exit(1); + } - pthread_sigmask(SIG_SETMASK, &oldset, NULL); + pthread_sigmask(SIG_SETMASK, &oldset, NULL); + } } |