From 99992fdf4c09b6ee582874b6b563a2c242498640 Mon Sep 17 00:00:00 2001 From: Nicolas Noble Date: Mon, 11 Aug 2014 15:17:00 -0700 Subject: Turns out, sometime I have good ideas; the shared_ptr in that Future is here so that the memory won't move even if the Future itself does. Putting that back in. --- src/Handle.cc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Handle.cc b/src/Handle.cc index ef24716..7162cd8 100644 --- a/src/Handle.cc +++ b/src/Handle.cc @@ -96,29 +96,29 @@ ssize_t Balau::Handle::forceWrite(const void * _buf, size_t count, Events::BaseE template Balau::Future genericRead(Balau::IO t) { - T b; + std::shared_ptr b(new T); size_t c = 0; return Balau::Future([t, b, c]() mutable { do { - ssize_t r = t->read(((uint8_t *) &b) + c, sizeof(T) - c); + ssize_t r = t->read(((uint8_t *) b.get()) + c, sizeof(T) - c); AAssert(r >= 0, "genericRead got an error: %zi", r); c += r; } while ((c < sizeof(T)) && !t->isEOF()); - return b; + return *b; }); } template Balau::Future genericReadBE(Balau::IO t) { - T b; + std::shared_ptr b(new T); size_t c = sizeof(T); return Balau::Future([t, b, c]() mutable { do { - ssize_t r = t->read(((uint8_t *) &b) + c - 1, 1); + ssize_t r = t->read(((uint8_t *) b.get()) + c - 1, 1); AAssert(r >= 0, "genericReadBE got an error: %zi", r); c -= r; } while (c && !t->isEOF()); - return b; + return *b; }); } -- cgit v1.2.3