Accodring to API return code for fail case is ODP_TIMER_POOL_INVALID
and errno set event if it's defined to NULL. Also add check on pool
alloc that input parameter is not invalid.
https://bugs.linaro.org/show_bug.cgi?id=2139

Signed-off-by: Maxim Uvarov <maxim.uva...@linaro.org>
---
 platform/linux-generic/odp_timer.c | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/platform/linux-generic/odp_timer.c 
b/platform/linux-generic/odp_timer.c
index ac72709..52cee99 100644
--- a/platform/linux-generic/odp_timer.c
+++ b/platform/linux-generic/odp_timer.c
@@ -214,16 +214,15 @@ static inline odp_timer_t tp_idx_to_handle(struct 
odp_timer_pool_s *tp,
 static void itimer_init(odp_timer_pool *tp);
 static void itimer_fini(odp_timer_pool *tp);
 
-static odp_timer_pool *odp_timer_pool_new(
-       const char *_name,
-       const odp_timer_pool_param_t *param)
+static odp_timer_pool_t odp_timer_pool_new(const char *_name,
+                                          const odp_timer_pool_param_t *param)
 {
        uint32_t tp_idx = odp_atomic_fetch_add_u32(&num_timer_pools, 1);
        if (odp_unlikely(tp_idx >= MAX_TIMER_POOLS)) {
                /* Restore the previous value */
                odp_atomic_sub_u32(&num_timer_pools, 1);
                __odp_errno = ENFILE; /* Table overflow */
-               return NULL;
+               return ODP_TIMER_POOL_INVALID;
        }
        size_t sz0 = ODP_ALIGN_ROUNDUP(sizeof(odp_timer_pool),
                        ODP_CACHE_LINE_SIZE);
@@ -787,10 +786,9 @@ odp_timer_pool_create(const char *name,
        /* Verify that we have a valid (non-zero) timer resolution */
        if (param->res_ns == 0) {
                __odp_errno = EINVAL;
-               return NULL;
+               return ODP_TIMER_POOL_INVALID;
        }
-       odp_timer_pool_t tp = odp_timer_pool_new(name, param);
-       return tp;
+       return odp_timer_pool_new(name, param);
 }
 
 void odp_timer_pool_start(void)
@@ -833,15 +831,17 @@ odp_timer_t odp_timer_alloc(odp_timer_pool_t tpid,
                            odp_queue_t queue,
                            void *user_ptr)
 {
+       odp_timer_t hdl;
+
+       if (odp_unlikely(tpid == ODP_TIMER_POOL_INVALID)
+               ODP_ABORT("Invalid timer pool.\n");
        if (odp_unlikely(queue == ODP_QUEUE_INVALID))
                ODP_ABORT("%s: Invalid queue handle\n", tpid->name);
        /* We don't care about the validity of user_ptr because we will not
         * attempt to dereference it */
-       odp_timer_t hdl = timer_alloc(tpid, queue, user_ptr);
-       if (odp_likely(hdl != ODP_TIMER_INVALID)) {
-               /* Success */
-               return hdl;
-       }
+       hdl = timer_alloc(tpid, queue, user_ptr);
+       if (odp_likely(hdl != ODP_TIMER_INVALID))
+               return hdl; /* Success */
        /* errno set by timer_alloc() */
        return ODP_TIMER_INVALID;
 }
-- 
2.7.1.250.gff4ea60

_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to