@@ -421,17 +421,27 @@ QemuCond multifd_send_cond;
static void *multifd_send_thread(void *opaque)
{
MultiFDSendParams *params = opaque;
+ uint8_t *address;
qemu_mutex_lock(¶ms->mutex);
while (!params->quit){
if (params->address) {
+ address = params->address;
params->address = 0;
qemu_mutex_unlock(¶ms->mutex);
+
+ if (write(params->s, &address, sizeof(uint8_t *))
+ != sizeof(uint8_t*)) {
+ /* Shuoudn't ever happen */
+ exit(-1);
+ }
qemu_mutex_lock(&multifd_send_mutex);
params->done = true;
qemu_cond_signal(&multifd_send_cond);
qemu_mutex_unlock(&multifd_send_mutex);
qemu_mutex_lock(¶ms->mutex);
+ } else {
+ qemu_cond_wait(¶ms->cond, ¶ms->mutex);
}
}
qemu_mutex_unlock(¶ms->mutex);
@@ -440,8 +450,6 @@ static void *multifd_send_thread(void *opaque)
}
static void terminate_multifd_send_threads(void)
- } else {
- qemu_cond_wait(¶ms->cond, ¶ms->mutex);
{
int i, thread_count;
@@ -550,12 +558,28 @@ QemuCond multifd_recv_cond;
static void *multifd_recv_thread(void *opaque)
{
MultiFDRecvParams *params = opaque;
+ uint8_t *address;
+ uint8_t *recv_address;
qemu_mutex_lock(¶ms->mutex);
while (!params->quit){
if (params->address) {
+ address = params->address;
params->address = 0;
qemu_mutex_unlock(¶ms->mutex);
+
+ if (read(params->s, &recv_address, sizeof(uint8_t*))
+ != sizeof(uint8_t *)) {
+ /* shouldn't ever happen */
+ exit(-1);
+ }
+
+ if (address != recv_address) {
+ printf("We received %p what we were expecting %p\n",
+ recv_address, address);
+ exit(-1);
+ }
+
qemu_mutex_lock(&multifd_recv_mutex);
params->done = true;
qemu_cond_signal(&multifd_recv_cond);
We just send the address through the alternate channels and test that it is ok. Signed-off-by: Juan Quintela <quintela@redhat.com> --- migration/ram.c | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-)