hlist.h   hlist.h 
skipping to change at line 19 skipping to change at line 19
* *
* Author: Jan Blunck <jblunck@suse.de> * Author: Jan Blunck <jblunck@suse.de>
* *
* Copyright (C) 2010 Mathieu Desnoyers <mathieu.desnoyers@efficios.com> * Copyright (C) 2010 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
* *
* This program is free software; you can redistribute it and/or modify it * This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License version 2.1 as * under the terms of the GNU Lesser General Public License version 2.1 as
* published by the Free Software Foundation. * published by the Free Software Foundation.
*/ */
#include <stddef.h>
struct cds_hlist_head struct cds_hlist_head
{ {
struct cds_hlist_node *next; struct cds_hlist_node *next;
}; };
struct cds_hlist_node struct cds_hlist_node
{ {
struct cds_hlist_node *next; struct cds_hlist_node *next;
struct cds_hlist_node *prev; struct cds_hlist_node *prev;
}; };
 End of changes. 1 change blocks. 
0 lines changed or deleted 2 lines changed or added


 urcu-bp.h   urcu-bp.h 
skipping to change at line 40 skipping to change at line 40
* You should have received a copy of the GNU Lesser General Public * You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software * License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
* *
* IBM's contributions to this file may be relicensed under LGPLv2 or later . * IBM's contributions to this file may be relicensed under LGPLv2 or later .
*/ */
#include <stdlib.h> #include <stdlib.h>
#include <pthread.h> #include <pthread.h>
/*
* See urcu-pointer.h and urcu/static/urcu-pointer.h for pointer
* publication headers.
*/
#include <urcu-pointer.h>
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
#include <urcu/map/urcu-bp.h> #include <urcu/map/urcu-bp.h>
/* /*
* Important ! * Important !
* *
* Each thread containing read-side critical sections must be registered * Each thread containing read-side critical sections must be registered
* with rcu_register_thread() before calling rcu_read_lock(). * with rcu_register_thread() before calling rcu_read_lock().
* rcu_unregister_thread() should be called before the thread exits. * rcu_unregister_thread() should be called before the thread exits.
*/ */
/*
* See urcu-pointer.h and urcu/static/urcu-pointer.h for pointer
* publication headers.
*/
#include <urcu-pointer.h>
#ifdef _LGPL_SOURCE #ifdef _LGPL_SOURCE
#include <urcu/static/urcu-bp.h> #include <urcu/static/urcu-bp.h>
/* /*
* Mappings for static use of the userspace RCU library. * Mappings for static use of the userspace RCU library.
* Should only be used in LGPL-compatible code. * Should only be used in LGPL-compatible code.
*/ */
/* /*
* rcu_read_lock() * rcu_read_lock()
* rcu_read_unlock() * rcu_read_unlock()
* *
* Mark the beginning and end of a read-side critical section. * Mark the beginning and end of a read-side critical section.
*/ */
#define rcu_read_lock_bp _rcu_read_lock #define rcu_read_lock_bp _rcu_read_lock
#define rcu_read_unlock_bp _rcu_read_unlock #define rcu_read_unlock_bp _rcu_read_unlock
#define rcu_dereference_bp rcu_dereference
#define rcu_cmpxchg_pointer_bp rcu_cmpxchg_pointer
#define rcu_xchg_pointer_bp rcu_xchg_pointer
#define rcu_set_pointer_bp rcu_set_pointer
#else /* !_LGPL_SOURCE */ #else /* !_LGPL_SOURCE */
/* /*
* library wrappers to be used by non-LGPL compatible source code. * library wrappers to be used by non-LGPL compatible source code.
* See LGPL-only urcu/static/urcu-pointer.h for documentation. * See LGPL-only urcu/static/urcu-pointer.h for documentation.
*/ */
extern void rcu_read_lock(void); extern void rcu_read_lock(void);
extern void rcu_read_unlock(void); extern void rcu_read_unlock(void);
extern void *rcu_dereference_sym_bp(void *p);
#define rcu_dereference_bp(p)
\
({
\
typeof(p) _________p1 = URCU_FORCE_CAST(typeof(p),
\
rcu_dereference_sym_bp(URCU_FORCE_CAST(void *, p)));
\
(_________p1);
\
})
extern void *rcu_cmpxchg_pointer_sym_bp(void **p, void *old, void *_new);
#define rcu_cmpxchg_pointer_bp(p, old, _new)
\
({
\
typeof(*(p)) _________pold = (old);
\
typeof(*(p)) _________pnew = (_new);
\
typeof(*(p)) _________p1 = URCU_FORCE_CAST(typeof(*(p)),
\
rcu_cmpxchg_pointer_sym_bp(URCU_FORCE_CAST(void **,
p),\
_________pold,
\
_________pnew));
\
(_________p1);
\
})
extern void *rcu_xchg_pointer_sym_bp(void **p, void *v);
#define rcu_xchg_pointer_bp(p, v)
\
({
\
typeof(*(p)) _________pv = (v);
\
typeof(*(p)) _________p1 = URCU_FORCE_CAST(typeof(*(p)),
\
rcu_xchg_pointer_sym_bp(URCU_FORCE_CAST(void **, p),
\
_________pv));
\
(_________p1);
\
})
extern void *rcu_set_pointer_sym_bp(void **p, void *v);
#define rcu_set_pointer_bp(p, v)
\
({
\
typeof(*(p)) _________pv = (v);
\
typeof(*(p)) _________p1 = URCU_FORCE_CAST(typeof(*(p)),
\
rcu_set_pointer_sym_bp(URCU_FORCE_CAST(void **, p),
\
_________pv));
\
(_________p1);
\
})
#endif /* !_LGPL_SOURCE */ #endif /* !_LGPL_SOURCE */
extern void synchronize_rcu(void); extern void synchronize_rcu(void);
/* /*
* rcu_bp_before_fork, rcu_bp_after_fork_parent and rcu_bp_after_fork_child * rcu_bp_before_fork, rcu_bp_after_fork_parent and rcu_bp_after_fork_child
* should be called around fork() system calls when the child process is no t * should be called around fork() system calls when the child process is no t
* expected to immediately perform an exec(). For pthread users, see * expected to immediately perform an exec(). For pthread users, see
* pthread_atfork(3). * pthread_atfork(3).
*/ */
 End of changes. 4 change blocks. 
6 lines changed or deleted 79 lines changed or added


 urcu-call-rcu.h   urcu-call-rcu.h 
skipping to change at line 89 skipping to change at line 89
struct call_rcu_data *get_thread_call_rcu_data(void); struct call_rcu_data *get_thread_call_rcu_data(void);
struct call_rcu_data *get_call_rcu_data(void); struct call_rcu_data *get_call_rcu_data(void);
pthread_t get_call_rcu_thread(struct call_rcu_data *crdp); pthread_t get_call_rcu_thread(struct call_rcu_data *crdp);
void set_thread_call_rcu_data(struct call_rcu_data *crdp); void set_thread_call_rcu_data(struct call_rcu_data *crdp);
int set_cpu_call_rcu_data(int cpu, struct call_rcu_data *crdp); int set_cpu_call_rcu_data(int cpu, struct call_rcu_data *crdp);
int create_all_cpu_call_rcu_data(unsigned long flags); int create_all_cpu_call_rcu_data(unsigned long flags);
void free_all_cpu_call_rcu_data(void); void free_all_cpu_call_rcu_data(void);
void call_rcu_before_fork(void);
void call_rcu_after_fork_parent(void);
void call_rcu_after_fork_child(void); void call_rcu_after_fork_child(void);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#endif /* _URCU_CALL_RCU_H */ #endif /* _URCU_CALL_RCU_H */
 End of changes. 1 change blocks. 
0 lines changed or deleted 2 lines changed or added

This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/