diff options
author | Eric S. Raymond <esr@thyrsus.com> | 2011-03-28 10:39:49 -0400 |
---|---|---|
committer | Eric S. Raymond <esr@thyrsus.com> | 2011-03-28 10:39:49 -0400 |
commit | 36a20c1a27af1aa64791a2528c371d39ba33939f (patch) | |
tree | 61a7f16ccad15003b19b134cadacf9e55b20844f /libgps_shm.c | |
parent | d87282aabf65b3def0fb2d2004f03a207bbbeb5b (diff) | |
download | gpsd-36a20c1a27af1aa64791a2528c371d39ba33939f.tar.gz |
Improve the barrier code and beat GCC harder about not reordering operations.
Diffstat (limited to 'libgps_shm.c')
-rw-r--r-- | libgps_shm.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/libgps_shm.c b/libgps_shm.c index 7cb63c96..4cb28e26 100644 --- a/libgps_shm.c +++ b/libgps_shm.c @@ -55,7 +55,8 @@ int gps_shm_read(struct gps_data_t *gpsdata) else { int before, after; - struct shmexport_t *shared = (struct shmexport_t *)gpsdata->privdata; + void *private_save = gpsdata->privdata; + volatile struct shmexport_t *shared = (struct shmexport_t *)gpsdata->privdata; struct gps_data_t noclobber; /* @@ -83,7 +84,7 @@ int gps_shm_read(struct gps_data_t *gpsdata) (void)memcpy((void *)gpsdata, (void *)&noclobber, sizeof(struct gps_data_t)); - /*@i1@*/gpsdata->privdata = shared; + /*@i1@*/gpsdata->privdata = private_save; return (int)sizeof(struct gps_data_t); } } |