fhandler_fifo::clone called fhandler_base::clone on each client
fhandler. But those fhandlers are actually fhandler_fifo objects, so
when fhandler_base::clone calls copyto, it's actually
fhandler_fifo::copyto that gets called. This can lead to mysterious
crashes.
Fix this by simply calling clone (which translates to
fhandler_fifo::clone) on each client fhandler.
fhandler_fifo *fhf = new (ptr) fhandler_fifo (ptr);
copyto (fhf);
for (int i = 0; i < nclients; i++)
- fhf->client[i].fh = client[i].fh->fhandler_base::clone ();
+ fhf->client[i].fh = client[i].fh->clone ();
return fhf;
}
};