1/*
2 * Copyright 2001-2011, Haiku.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		Ingo Weinhold (bonefish@users.sf.net)
7 */
8
9//!	Global library initialization/termination routines.
10
11
12#include <stdio.h>
13#include <stdlib.h>
14
15#include <AppMisc.h>
16#include <LooperList.h>
17#include <MessagePrivate.h>
18#include <RosterPrivate.h>
19#include <TokenSpace.h>
20
21
22extern void __initialize_locale_kit();
23
24
25// debugging
26//#define DBG(x) x
27#define DBG(x)
28#define OUT	printf
29
30
31static void
32initialize_forked_child()
33{
34	DBG(OUT("initialize_forked_child()\n"));
35
36	BMessage::Private::StaticReInitForkedChild();
37	BPrivate::gLooperList.InitAfterFork();
38	BPrivate::gDefaultTokens.InitAfterFork();
39	BPrivate::init_team_after_fork();
40
41	DBG(OUT("initialize_forked_child() done\n"));
42}
43
44
45extern "C" void
46initialize_before(image_id)
47{
48	DBG(OUT("initialize_before()\n"));
49
50	BMessage::Private::StaticInit();
51	BRoster::Private::InitBeRoster();
52
53	atfork(initialize_forked_child);
54
55	DBG(OUT("initialize_before() done\n"));
56}
57
58
59extern "C" void
60initialize_after(image_id)
61{
62	DBG(OUT("initialize_after()\n"));
63
64	__initialize_locale_kit();
65
66	DBG(OUT("initialize_after() done\n"));
67}
68
69
70extern "C" void
71terminate_after(image_id)
72{
73	DBG(OUT("terminate_after()\n"));
74
75	BRoster::Private::DeleteBeRoster();
76	BMessage::Private::StaticCleanup();
77	BMessage::Private::StaticCacheCleanup();
78
79	DBG(OUT("terminate_after() done\n"));
80}
81
82