> I'm pretty sure TSContDestroy() also destroys any mutex for the continuation.
Well, sure. But what I was trying to say is that not all Continuations require a mutex. By default, in the C API they do not have one unless you explicitly pass one. This proposes an inconsistent change in that by default, new Continuations do have a mutex. I think it is not a C/C++ question, but an API functionality/usability question. On Mon, Mar 19, 2018 at 12:56 PM, Walt Karas <wka...@oath.com.invalid> wrote: > I'm pretty sure TSContDestroy() also destroys any mutex for the > continuation. (Per our other discussion, I got exasperated trying to > make sure of this looking through the code with just vi.) > > On Mon, Mar 19, 2018 at 10:23 AM, Derek Dagit <der...@oath.com.invalid> > wrote: > > I might be missing the connection to the proposed Continuation > constructor > > behavior with regard to the mutex. > > > > If there is a good reason to change this behavior, we should consider it. > > Otherwise it's probably best to keep consistency with the existing API. > > > > On Mon, Mar 19, 2018 at 10:16 AM, Walt Karas <wka...@oath.com.invalid> > > wrote: > > > >> The current C interface is bad because resources are not freed in > >> destructors, and the use of raw void pointers is necessary. > >> > >> On Mon, Mar 19, 2018 at 10:09 AM, Derek Dagit <der...@oath.com.invalid> > >> wrote: > >> > OK, so I am in favor of consistency with the existing C API, if > possible > >> > and only if there is not good reason to break with the way the C API > is > >> > doing it. > >> > > >> > On Mon, Mar 19, 2018 at 9:58 AM, Walt Karas <wka...@oath.com.invalid> > >> wrote: > >> > > >> >> yes > >> >> > >> >> > >> >> On Mon, Mar 19, 2018 at 9:54 AM, Derek Dagit <der...@oath.com.invalid > > > >> >> wrote: > >> >> >> Continuation(TSMutex mutexp = TSMutexCreate()) : > >> >> > > >> >> > Not every continuation requires a mutex. To get behavior similar to > >> the > >> >> > current C API we would need to pass a `nullptr` to the constructor, > >> >> right? > >> >> > > >> >> > On Fri, Mar 16, 2018 at 6:39 PM, Walt Karas > <wka...@oath.com.invalid> > >> >> wrote: > >> >> > > >> >> >> Does this seem like a good wrapper class for continuations in the > C++ > >> >> API? > >> >> >> > >> >> >> class Continuation > >> >> >> { > >> >> >> public: > >> >> >> Continuation(TSMutex mutexp = TSMutexCreate()) : > >> >> >> _cont(TSContCreate(_generalEventFunc, mutexp)) > >> >> >> { > >> >> >> TSContDataSet(_cont, static_cast<void *>(this)); > >> >> >> } > >> >> >> > >> >> >> TSCont > >> >> >> asTSCont() const > >> >> >> { > >> >> >> return _cont; > >> >> >> } > >> >> >> > >> >> >> void > >> >> >> destroy() > >> >> >> { > >> >> >> if (_cont) { > >> >> >> TSContDestroy(_cont); > >> >> >> _cont = nullptr; > >> >> >> } > >> >> >> } > >> >> >> > >> >> >> ~Continuation() > >> >> >> { > >> >> >> if (_cont) { > >> >> >> TSContDestroy(_cont); > >> >> >> } > >> >> >> } > >> >> >> > >> >> >> // No copying. > >> >> >> Continuation(const Continuation &) = delete; > >> >> >> Continuation &operator=(const Continuation &) = delete; > >> >> >> > >> >> >> // Moving allowed. > >> >> >> Continuation(Continuation &&that) > >> >> >> { > >> >> >> _cont = that._cont; > >> >> >> that._cont = nullptr; > >> >> >> } > >> >> >> Continuation & > >> >> >> operator=(Continuation &&that) > >> >> >> { > >> >> >> if (&that != this) { > >> >> >> if (_cont) { > >> >> >> TSContDestroy(_cont); > >> >> >> } > >> >> >> _cont = that._cont; > >> >> >> that._cont = nullptr; > >> >> >> } > >> >> >> return *this; > >> >> >> } > >> >> >> > >> >> >> explicit operator bool() const { return _cont != nullptr; } > >> >> >> > >> >> >> private: > >> >> >> // Distinct continuation behavior is achieved by overriding this > >> >> >> function in a derived continuation type. > >> >> >> // > >> >> >> virtual int _run(TSEvent event, void *edata) = 0; > >> >> >> > >> >> >> // This is the event function for all continuations in C++ > plugins. > >> >> >> // > >> >> >> static int _generalEventFunc(TSCont cont, TSEvent event, void > >> *edata); > >> >> >> > >> >> >> TSCont _cont; > >> >> >> }; > >> >> >> > >> >> > > >> >> > > >> >> > > >> >> > -- > >> >> > Derek > >> >> > >> > > >> > > >> > > >> > -- > >> > Derek > >> > > > > > > > > -- > > Derek > -- Derek