GitHub user alanconway opened a pull request:
https://github.com/apache/qpid-proton/pull/109
Cpp drop thread safe
Make container::connect(), open_sender() etc. return void and remove
thread_safe<> and returned<>.
With the work_queue changes everything works fine with minor example
modifications, however it means you must wait till a handler function
before you
can use a connection or link, hence the minor example changes. It would be
nice to return something that at least provides access to the work_queue.
NOTE: to be memory safe, whatever is returned must do injected proton
refcounting similar to what thread_safe<> does, to avoid the proton object
and
its work queue being deleted unexpectedly. However it could be a much
simpler
type with a simple internal refcount.
It doesn't need to provide the operator delete override, conversion to
shared_ptr<> etc. that thread_safe<> does in order to allow proton object
lifecycles to be controlled by std::c++ smart pointers. That doesn't seem
like a
required feature with the current API, and it could be added back later
outside
the core API if we do ever want it.
You can merge this pull request into a Git repository by running:
$ git pull https://github.com/alanconway/qpid-proton cpp-drop-thread-safe
Alternatively you can review and apply these changes as the patch at:
https://github.com/apache/qpid-proton/pull/109.patch
To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:
This closes #109
----
commit 61e465ae9a4894a003e1f4aaeb52f632519a8a6b
Author: Andrew Stitcher <[email protected]>
Date: 2017-01-23T17:32:50Z
PROTON-1400: [C++ binding] Removed proton_event and proton_handler
- Removed old low level proton event handling completely
- Now directly dispatch to the messaging_handler
- Moved private message::decode directly into message handling code
commit e2c506e8db66e537e7f63f240c8333f9b4987345
Author: Andrew Stitcher <[email protected]>
Date: 2017-01-25T04:36:03Z
PROTON-1400: WIP Use the mt broker example as the example instead of the
previous st broker
- The st broker didn't correctly respect the object access constraints from
within handlers
commit 87e377ecae1c0513f50b30804a455b32258eaaf2
Author: Andrew Stitcher <[email protected]>
Date: 2017-02-08T07:32:36Z
PROTON-1400: [C++ binding] Proactor container implementation
- Remove all reactor use
- Rearrange object context code
- Change container includes to proactor container includes
- Add sender/receiver options API to connection so we never need container
in handlers
- Rework connection_driver remove all use of container
- Change signature of listener_handler callbacks to supply the listener
commit 221e87725b5feb8b3fab66ca66db1155ef95ddba
Author: Andrew Stitcher <[email protected]>
Date: 2017-02-09T01:12:36Z
PROTON-1400: [C++ binding] Remove reactor container implementation files.
commit 4471e8f54701f93048226923d33eb48172faaf29
Author: Andrew Stitcher <[email protected]>
Date: 2017-03-03T20:51:58Z
NO-JIRA: Header file corrections
commit 84f81e795bbbf47973ea99e94b33eb2af305ae6e
Author: Andrew Stitcher <[email protected]>
Date: 2017-03-28T17:45:28Z
PROTON-1400: [C++ example] Rework broker to use container event loops
commit e9e81224c12782b60501ddc8bca43021cbf327ce
Author: Andrew Stitcher <[email protected]>
Date: 2017-04-14T06:13:12Z
PROTON-1400: [C+ binding] Change semantic for incoming xx_open
- If not overridden then you get automatic outgoing matching xx_open
- If overridden then it is assumed you will handle the outgoing open
yourself.
commit 195fda811d610875a21895b9db210dfb80c35225
Author: Andrew Stitcher <[email protected]>
Date: 2017-04-20T19:20:40Z
PROTON-1400: [C++ binding] Implement container level event_loops
commit 9af923eaea9c8f994e250299d145c1bee9de69cd
Author: Andrew Stitcher <[email protected]>
Date: 2017-04-27T17:05:14Z
PROTON-1471: [C++ binding] Use pn_proactor_now() to implement
timestamp::now()
commit cc65a4c397a8cd0491835ee7f778b0d125b8c916
Author: Andrew Stitcher <[email protected]>
Date: 2017-05-15T05:27:54Z
PROTON-1481: [C++ binding] Rename event_loop API to work_queue
commit 4b2695ba65dae55f1dbc91b89b75cda08c3313e1
Author: Andrew Stitcher <[email protected]>
Date: 2017-05-15T05:36:52Z
PROTON-1481: [C++ binding] simplify work_queue code by introducing work type
- The work type can be created from std::function<void()> or void_function0
- and so pushes those c++11/C++03 differences into a single place
commit dded51287d8cf2f1d5ae961149adfbb327d0933f
Author: Andrew Stitcher <[email protected]>
Date: 2017-05-15T05:45:43Z
PROTON-1481: [C++ binding] Split out general work deferring functions to
the work_queue header
Add efficient C++11 versions of work factories
Reorder defer arguments to be like std::bind
Add extra overloads for defer like std::bind (for free functions arbitrary
work_queues)
commit cafe328afe3a629b8b204e5dc10d9987f1a6a44b
Author: Andrew Stitcher <[email protected]>
Date: 2017-05-18T17:47:46Z
PROTON-1481: [C++ binding] Further work on C++03 convenience functions
- Propagate the result of work_queue::add
- Fix memory leak of proton::defer if the deferred function can't be called
- Add make_work convenience in place of std::bind
- Simplfy defer oveload options - have to specify work_queue
commit bf6fc41d1ed38267e578c5ec864369ccd07a0792
Author: Andrew Stitcher <[email protected]>
Date: 2017-05-18T18:14:58Z
PROTON-1481: [C++ binding] Simplify code to use convenience functions
commit 385f7d900911c6737ea6c3098bc96de7e0a03e9f
Author: Andrew Stitcher <[email protected]>
Date: 2017-05-19T04:59:55Z
PROTON-1482: [C++ binding] Implemented scheduling delaying work on a
work_queue
commit 8c823cc8fe39c2ebc97ef61804f71d2d63aab668
Author: Andrew Stitcher <[email protected]>
Date: 2017-05-19T05:38:18Z
PROTON-1482: [C++ binding] Added convenience overload to proton::defer
for scheduled deferred work
- Used new conveniences in scheduled_send_03 example
commit 0c35aacc2a495e3cc916e0fbae8690d396b356ec
Author: Andrew Stitcher <[email protected]>
Date: 2017-05-19T16:27:17Z
PROTON-1481: [C++ binding] Added simpler way to get work_queue from model
objects
commit 2e894f03169f2fddf463c08273f5b66669a4f14b
Author: Andrew Stitcher <[email protected]>
Date: 2017-05-19T21:02:05Z
PROTON-1481: Rename proton::defer -> proton::schedule_work
commit 1492c28c9a432e352230500b16f5baed3653eb62
Author: Andrew Stitcher <[email protected]>
Date: 2017-05-26T21:00:31Z
PROTON-1400: [C++ binding] Make proactor container thread safe
commit 076b802b960167b6c26484a48ea03678e5f417d9
Author: Andrew Stitcher <[email protected]>
Date: 2017-05-26T21:01:00Z
PROTON-1400: [C++ example] Use multiple threads in broker example if
available
commit b69bc2ecd5fce3bc0aa8ac742159225181fcd01b
Author: Alan Conway <[email protected]>
Date: 2017-07-06T20:25:09Z
WIP: Drop thread_safe<> and returned<>
Make container::connect(), open_sender() etc. return void and remove
thread_safe<> and returned<>.
With the work_queue changes everything works fine with minor example
modifications, however it means you must wait till a handler function
before you
can use a connection or link, hence the minor example changes. It would be
nice to return something that at least provides access to the work_queue.
NOTE: to be memory safe, whatever is returned must do injected proton
refcounting similar to what thread_safe<> does, to avoid the proton object
and
its work queue being deleted unexpectedly. However it could be a much
simpler
type with a simple internal refcount.
It doesn't need to provide the operator delete override, conversion to
shared_ptr<> etc. that thread_safe<> does in order to allow proton object
lifecycles to be controlled by std::c++ smart pointers. That doesn't seem
like a
required feature with the current API, and it could be added back later
outside
the core API if we do ever want it.
----
---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]