X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=folly%2Ftest%2FPackedSyncPtrTest.cpp;h=5dd6aa7180cd00be4b41b1d0c7faadf155dc2bfe;hb=bba519bfb1b4c4d24fd210696e31fcf5e25d13e8;hp=a2dd8e5b6862907eff92e700f98a87e3eeae1d3b;hpb=27494a20393fa45072e7d526d358835f3abe312a;p=folly.git diff --git a/folly/test/PackedSyncPtrTest.cpp b/folly/test/PackedSyncPtrTest.cpp index a2dd8e5b..5dd6aa71 100644 --- a/folly/test/PackedSyncPtrTest.cpp +++ b/folly/test/PackedSyncPtrTest.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2012 Facebook, Inc. + * Copyright 2017 Facebook, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,21 +14,24 @@ * limitations under the License. */ -#include "folly/PackedSyncPtr.h" +#include #include -#include #include #include #include +#include + using folly::PackedSyncPtr; namespace { // Compile time check for packability. This requires that // PackedSyncPtr is a POD struct on gcc. -struct ignore { PackedSyncPtr foo; char c; } __attribute__((packed)); +FOLLY_PACK_PUSH +struct ignore { PackedSyncPtr foo; char c; } FOLLY_PACK_ATTR; +FOLLY_PACK_POP static_assert(sizeof(ignore) == 9, "PackedSyncPtr wasn't packable"); } @@ -53,12 +56,13 @@ TEST(PackedSyncPtr, Basic) { sp.setExtra(0x13); EXPECT_EQ(sp.extra(), 0x13); EXPECT_EQ((sp.get() + 1)->second, 7); - delete sp.get(); + delete[] sp.get(); auto newP = new std::pair(); sp.set(newP); EXPECT_EQ(sp.extra(), 0x13); EXPECT_EQ(sp.get(), newP); sp.unlock(); + delete sp.get(); } // Here we use the PackedSyncPtr to lock the whole SyncVec (base, *base, and sz) @@ -66,6 +70,7 @@ template struct SyncVec { PackedSyncPtr base; SyncVec() { base.init(); } + ~SyncVec() { free(base.get()); } void push_back(const T& t) { base.set((T*) realloc(base.get(), (base.extra() + 1) * sizeof(T))); @@ -111,7 +116,7 @@ TEST(PackedSyncPtr, Application) { } for (auto& kv : map) { - // Make sure every thread succesfully inserted it's ID into every vec + // Make sure every thread successfully inserted it's ID into every vec std::set idsFound; for (auto& elem : kv.second) { EXPECT_TRUE(idsFound.insert(elem).second); // check for dups