Harmonize vec/pool_get_aligned object sizes and alignment requests
[vpp.git] / src / vppinfra / pool.h
index 62d5b54..8b39a91 100644 (file)
@@ -190,6 +190,8 @@ do {                                                                    \
   pool_header_t * _pool_var (p) = pool_header (P);                      \
   uword _pool_var (l);                                                  \
                                                                         \
+  STATIC_ASSERT(A==0 || ((A % sizeof(P[0]))==0) || ((sizeof(P[0]) % A) == 0), \
+                "Pool aligned alloc of incorrectly sized object");      \
   _pool_var (l) = 0;                                                    \
   if (P)                                                                \
     _pool_var (l) = vec_len (_pool_var (p)->free_indices);              \
@@ -233,9 +235,10 @@ do {                                                                    \
   _pool_var (l) = 0;                                                    \
   if (P)                                                                \
     {                                                                   \
-    if (_pool_var (p)->max_elts)                                        \
-      return 0;                                                         \
-    _pool_var (l) = vec_len (_pool_var (p)->free_indices);              \
+      if (_pool_var (p)->max_elts)                                      \
+        _pool_var (l) = _pool_var (p)->max_elts;                       \
+      else                                                             \
+        _pool_var (l) = vec_len (_pool_var (p)->free_indices);          \
     }                                                                   \
                                                                         \
   /* Free elements, certainly won't expand */                           \