[ovs-dev] [PATCH 02/26] list: New macro OVS_LIST_POISON for initializing a poisoned list.

Jarno Rajahalme jrajahalme at nicira.com
Fri Jul 31 20:29:20 UTC 2015


Thanks!

  Jarno

> On Jul 31, 2015, at 1:14 PM, Ben Pfaff <blp at nicira.com> wrote:
> 
> On Fri, Jul 31, 2015 at 01:03:24PM -0700, Jarno Rajahalme wrote:
>>> On Jul 31, 2015, at 11:37 AM, Ben Pfaff <blp at nicira.com> wrote:
>>> 
>>> On Fri, Jul 31, 2015 at 11:18:22AM -0700, Jarno Rajahalme wrote:
>>>> One question below,
>>> 
>>> One answer below ;-)
>>> 
>>>> Acked-by: Jarno Rajahalme <jrajahalme at nicira.com>
>>> 
>>> Thanks.
>>> 
>>>>> On Jul 29, 2015, at 11:42 PM, Ben Pfaff <blp at nicira.com> wrote:
>>>>> 
>>>>> To be used in an upcoming commit.
>>>>> 
>>>>> Signed-off-by: Ben Pfaff <blp at nicira.com>
>>>>> ---
>>>>> lib/list.h | 7 ++++++-
>>>>> 1 file changed, 6 insertions(+), 1 deletion(-)
>>>>> 
>>>>> diff --git a/lib/list.h b/lib/list.h
>>>>> index 7ba1e35..c1b0891 100644
>>>>> --- a/lib/list.h
>>>>> +++ b/lib/list.h
>>>>> @@ -23,6 +23,11 @@
>>>>> #include "util.h"
>>>>> #include "openvswitch/list.h"
>>>>> 
>>>>> +/* Initializer for a list with pointers that will (probably) cause segfaults if
>>>>> + * dereferenced and, better yet, show up clearly in a debugger. */
>>>>> +#define OVS_LIST_POISON { (void *) (uintptr_t) 0xccccccccccccccccULL, \
>>>>> +                          (void *) (uintptr_t) 0xccccccccccccccccULL }
>>>>> +
>>>>> static inline void list_init(struct ovs_list *);
>>>>> static inline void list_poison(struct ovs_list *);
>>>>> 
>>>>> @@ -91,7 +96,7 @@ list_init(struct ovs_list *list)
>>>>> static inline void
>>>>> list_poison(struct ovs_list *list)
>>>>> {
>>>>> -    memset(list, 0xcc, sizeof *list);
>>>>> +    *list = (struct ovs_list) OVS_LIST_POISON;
>>>> 
>>>> Could the cast be part of the macro?
>>> 
>>> The short answer is "yes".  Would you like it that way, then?
>> 
>> If the compound literal can still be used as an initializer, then yes,
>> so that the macro can be used by itself in both situations, as an
>> initializer and as a compound literal in an assignment.
> 
> It can be used both ways, so I changed this to:
> 
> --8<--------------------------cut here-------------------------->8--
> 
> From: Ben Pfaff <blp at nicira.com <mailto:blp at nicira.com>>
> Date: Fri, 31 Jul 2015 13:14:20 -0700
> Subject: [PATCH] list: New macro OVS_LIST_POISON for initializing a poisoned
> list.
> 
> To be used in an upcoming commit.
> 
> Signed-off-by: Ben Pfaff <blp at nicira.com <mailto:blp at nicira.com>>
> Acked-by: Jarno Rajahalme <jrajahalme at nicira.com <mailto:jrajahalme at nicira.com>>
> ---
> lib/list.h | 8 +++++++-
> 1 file changed, 7 insertions(+), 1 deletion(-)
> 
> diff --git a/lib/list.h b/lib/list.h
> index 7ba1e35..5ad54b8 100644
> --- a/lib/list.h
> +++ b/lib/list.h
> @@ -23,6 +23,12 @@
> #include "util.h"
> #include "openvswitch/list.h"
> 
> +/* "struct ovs_list" with pointers that will (probably) cause segfaults if
> + * dereferenced and, better yet, show up clearly in a debugger. */
> +#define OVS_LIST_POISON \
> +    (struct ovs_list) { (void *) (uintptr_t) 0xccccccccccccccccULL, \
> +                        (void *) (uintptr_t) 0xccccccccccccccccULL }
> +
> static inline void list_init(struct ovs_list *);
> static inline void list_poison(struct ovs_list *);
> 
> @@ -91,7 +97,7 @@ list_init(struct ovs_list *list)
> static inline void
> list_poison(struct ovs_list *list)
> {
> -    memset(list, 0xcc, sizeof *list);
> +    *list = OVS_LIST_POISON;
> }
> 
> /* Inserts 'elem' just before 'before'. */
> -- 
> 2.1.3




More information about the dev mailing list