Regarding thread safety, being something arne brought up... the result is to sum it up in one word: ugly. The two major functional interfaces (DCHub and DCQueue) now have release(...) and copy(...) functions in them, the respective *Data structs also have an isManaged member that is False if release must be called for said object.
Where copies are not made by dcpp thread safety is achieved by string cache and use of locks. Which means if plugins need to take the passed managed object outside calls which are direct descendants of the call to PluginManager::runHook they are responsible of making a copy of the object using the copy function and also taking care not to use resulting objects after their "handle" (ie. object member of f.ex. HubData) is out of scope, which they can track with certain events (such as onHubOnline/onHubOffline). Of course the object handle of UserData has been eliminated as unsafe... we could also eliminate the equivalent handle in HubData, but i see no reason for that because we can track the situation where that handle (or any copies plugins created) becomes invalid on plugin side. -- You received this bug notification because you are a member of Dcplusplus-team, which is subscribed to DC++. https://bugs.launchpad.net/bugs/587597 Title: Plugins support Status in DC++: In Progress Bug description: Ok, I'll leave out the sales pitch... here is a potential patch for adding support for plugins to DC++, compiles cleanly (ie. shouldn't generate any warnings) under mingw and visual studio of course and has been tested and working. The code itself has been in ApexDC++ for a while so it has gotten real life use as well, of course migrating it to clean DC++ needed a few changes here and there but nothing major. Should also compile and work on linux as it is... but this I have not had chance to test at all so that is just on paper for now. The major difference between this patch and what's in ApexDC++ is that it does not include a full settings page for plugins which ApexDC++ has. This is simply because I don't know a squat about DWT. Instead this patch has set of chat commands added, so you can play around with the plugins, but if this gets accepted then I certainly hope someone is willing to invest into a settings page for usability sake. Oh and few changes to the code come directly from bcdcpp, you'll spot them I am sure :). As for the plugins currently three exists.. a pure C sample that (you guessed it) really doesn't do anything productive and then a plugin version of bcdcpp's lua (this one is pretty direct port, so it is C++). The third one is not so impressive... it adds support for various media player chat announces (spam is too negative of a word), although primarily I created it to proof that it is possible to make a plugin that modifies the GUI, even though the API itself has little to no support for such plugin (on windows anyways), The first two plugins can be compiled with both mingw and visual studio and are also hopefully linux friendly, the third not so much. Oh and you can mix plugins... so mingw compiled dcpp will cope just fine with visual studio compiled plugins or vice versa (obviously this also means that the stl's used can be different). In theory you should also be able to create plugins with languages such as VB and Delphi but this very much theoretical. Well do what you want with it... it's posted now. To manage notifications about this bug go to: https://bugs.launchpad.net/dcplusplus/+bug/587597/+subscriptions _______________________________________________ Mailing list: https://launchpad.net/~linuxdcpp-team Post to : [email protected] Unsubscribe : https://launchpad.net/~linuxdcpp-team More help : https://help.launchpad.net/ListHelp

