Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP1:GA
perl-qpid
0004-QPID-3650-Avoid-unaligned-memory-access.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0004-QPID-3650-Avoid-unaligned-memory-access.patch of Package perl-qpid
From 19fb389223e423bb6c77b67c3a76718c295c40be Mon Sep 17 00:00:00 2001 From: Andrew Stitcher <astitcher@apache.org> Date: Wed, 11 Jun 2014 17:47:37 +0000 Subject: [PATCH 4/4] QPID-3650: Avoid unaligned memory access git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1601969 13f79535-47bb-0310-9956-ffa450edef68 --- qpid/cpp/src/qpid/sys/rdma/RdmaClient.cpp | 8 ++++---- qpid/cpp/src/qpid/sys/rdma/rdma_wrap.h | 11 +++++++++++ 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/qpid/cpp/src/qpid/sys/rdma/RdmaClient.cpp b/qpid/cpp/src/qpid/sys/rdma/RdmaClient.cpp index 38e9b59..504000a 100644 --- a/qpid/cpp/src/qpid/sys/rdma/RdmaClient.cpp +++ b/qpid/cpp/src/qpid/sys/rdma/RdmaClient.cpp @@ -97,8 +97,8 @@ void write(Rdma::AsynchIO& aio) { Rdma::Buffer* b = aio.getSendBuffer(); if (!b) break; b->dataCount(msgsize); - uint32_t* ip = reinterpret_cast<uint32_t*>(b->bytes()); - uint32_t* lip = ip + b->dataCount() / sizeof(uint32_t); + uint32_t* ip = b->words(); + uint32_t* lip = ip + b->wordCount(); while (ip != lip) {*ip++ = *output; ++output;} aio.queueWrite(b); ++smsgs; @@ -116,8 +116,8 @@ void data(Poller::shared_ptr p, Rdma::AsynchIO& aio, Rdma::Buffer* b) { // Check message is unaltered bool match = true; - uint32_t* ip = reinterpret_cast<uint32_t*>(b->bytes()); - uint32_t* lip = ip + b->dataCount() / sizeof(uint32_t); + uint32_t* ip = b->words(); + uint32_t* lip = ip + b->wordCount(); while (ip != lip) { if (*ip++ != *input) {match = false; break;} ++input;} if (!match) { cout << "Data doesn't match: at msg " << rmsgs << " byte " << rbytes-b->dataCount() << " (ish)\n"; diff --git a/qpid/cpp/src/qpid/sys/rdma/rdma_wrap.h b/qpid/cpp/src/qpid/sys/rdma/rdma_wrap.h index 5f84793..5d9b681 100644 --- a/qpid/cpp/src/qpid/sys/rdma/rdma_wrap.h +++ b/qpid/cpp/src/qpid/sys/rdma/rdma_wrap.h @@ -53,7 +53,9 @@ namespace Rdma { friend class QueuePairEvent; char* bytes() const; + uint32_t* words() const; int32_t byteCount() const; + int32_t wordCount() const; int32_t dataCount() const; void dataCount(int32_t); @@ -68,11 +70,20 @@ namespace Rdma { return (char*) sge.addr; } + inline uint32_t* Buffer::words() const { + return (uint32_t*) sge.addr; + } + /** return the number of bytes available for application data */ inline int32_t Buffer::byteCount() const { return bufferSize - reserved; } + /** return the number of words available for application data */ + inline int32_t Buffer::wordCount() const { + return (bufferSize - reserved) / sizeof(uint32_t); + } + inline int32_t Buffer::dataCount() const { return sge.length; } -- 1.9.3
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor