mirror of
				https://gitlab.labs.nic.cz/labs/bird.git
				synced 2024-05-11 16:54:54 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			43 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
<!--
 | 
						|
	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 is able to print out the list of resources and
 | 
						|
the corresponding modules they are allocated by.
 | 
						|
 | 
						|
<p>Each allocated resource (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/) 
 | 
						|
<item><it/Sockets/ (<struct/socket/) 
 | 
						|
</itemize>
 |