2000-06-05 19:41:41 +08:00
|
|
|
<!--
|
|
|
|
BIRD Programmer's Guide: Resources
|
|
|
|
|
|
|
|
(c) 2000 Martin Mares <mj@ucw.cz>
|
|
|
|
-->
|
|
|
|
|
|
|
|
<chapt>Resources
|
|
|
|
|
|
|
|
<sect>Introduction
|
|
|
|
|
|
|
|
<p>Most large software projects implemented in classical procedural
|
|
|
|
programming languages usually end up with lots of code taking care
|
|
|
|
of resource allocation and deallocation. Bugs in such code are often
|
|
|
|
very difficult to find, because they cause only `resource leakage',
|
|
|
|
that is keeping a lot of memory and other resources which nobody
|
|
|
|
references to.
|
|
|
|
|
|
|
|
<p>We've tried to solve this problem by employing a resource tracking
|
|
|
|
system which keeps track of all the resources allocated by all the
|
|
|
|
modules of BIRD, deallocates everything automatically when a module
|
|
|
|
shuts down and it's is able to print out the list of resources and
|
|
|
|
the corresponding modules they are allocated by.
|
|
|
|
|
|
|
|
<p>Each allocated resource (and from now we'll speak about allocated
|
|
|
|
resources only) is represented by a structure starting with a standard
|
|
|
|
header (struct <struct/resource/) consisting of a list node (resources are
|
|
|
|
often linked to various lists) and a pointer to <struct/resclass/ -- a resource
|
|
|
|
class structure pointing to functions implementing generic resource
|
|
|
|
operations (such as freeing of the resource) for the particular resource
|
|
|
|
type.
|
|
|
|
|
|
|
|
<p>There exist the following types of resources:
|
|
|
|
|
|
|
|
<itemize>
|
|
|
|
<item><it/Resource pools/ (<struct/pool/)
|
|
|
|
<item><it/Memory blocks/
|
|
|
|
<item><it/Linear memory pools/ (<struct/linpool/)
|
|
|
|
<item><it/Slabs/ (<struct/slab/)
|
|
|
|
<item><it/Events/ (<struct/event/)
|
|
|
|
<item><it/Timers/ (<struct/timer/)
|
2000-06-05 20:19:12 +08:00
|
|
|
<item><it/Sockets/ (<struct/socket/)
|
2000-06-05 19:41:41 +08:00
|
|
|
</itemize>
|