The LoadPersistent*()/SavePersistent*() functions caused moddata to be tagged with ->unloaded=1. Though it seems it caused no real issues this is not good... we now properly tag them as 0 and the like. Also did a code cleanup / overhaul on that system as well. For other ModData we now handle the case where a module is loaded with with a newer version and that newer version is no longer having certain moddata, eg the name changed or it no longer needs it. KNOWN ISSUE: Unfortunately we cannot call the free function for the old moddata that is no longer being handled by the newer version of the module, since the module is already unloaded. So this will result in a memory leak, but not in a crash. KNOWN ISSUE: Similarly, for SavePersistentPointer() there is a free function, again this is called just fine if the module is permanently unloaded but NOT if the module is reloaded with the same name and no longer is interested in the persistent pointer object. Again, here too, that would result in a memory leak but not in a crash. Fortunately the "known issues" are rare. Fixing these is impossible with the current module API because modules are unloaded after MOD_TEST and before MOD_INIT, and only after MOD_INIT we know which moddata is handled by the new version of the module. To change that we would need to keep the old module around until after MOD_INIT of the new module (so we can call free functions in the old module), but that means delaying the MOD_UNLOAD for the old modules until after MOD_INIT of the new modules, which changes the sequence too much that i don't dare to do that. For example, it would mean a database save routine in the old module would only be called after MOD_INIT finished in the new module, which may be unexpected since right now MOD_UNLOAD is called before MOD_INIT and maybe the db loading is done in MOD_INIT, which would need to be moved to MOD_LOAD. That's just one example, there may be others. I think such a change can only be done on a major UnrealIRCd version change, so we will have to live this for now. As said, fortunately it is a corner case.
About UnrealIRCd
UnrealIRCd is an Open Source IRC Server, serving thousands of networks since 1999. It runs on Linux, OS X and Windows and is currently the most widely deployed IRCd with a market share of 38%. UnrealIRCd is a highly advanced IRCd with a strong focus on modularity and security. It uses an advanced and highly configurable configuration file. Other key features include: full IRCv3 support, SSL/TLS, cloaking, advanced anti-flood and anti-spam systems, GeoIP, remote includes, and lots of other features. We are also particularly proud on our extensive online documentation.
Versions
- UnrealIRCd 6 is the stable series since December 2021. All new features go in there.
- UnrealIRCd 5 is the oldstable series. It is End Of Life. Only security bugs will be fixed until June 30, 2023, after which all support will stop.
- For full details of release scheduling and EOL dates, see UnrealIRCd releases on the wiki
How to get started
Follow the installation guide on the wiki. See:
Documentation & FAQ
You can find all documentation online at: https://www.unrealircd.org/docs/
We also have a good FAQ: https://www.unrealircd.org/docs/FAQ
Website, support, and other links
- https://www.unrealircd.org - Our main website
- https://forums.unrealircd.org - Support
- https://bugs.unrealircd.org - Bug tracker
- ircs://irc.unrealircd.org:6697/unreal-support - IRC support