aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Doc/c-api/lifecycle.dot
blob: dca9f87e9e0acaa5e8ca48a855a108265635dced (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
digraph "Life Events" {
   graph [
     fontnames="svg"
     fontsize=12.0
     id="life_events_graph"
     layout="dot"
     margin="0,0"
     ranksep=0.25
     stylesheet="lifecycle.dot.css"
   ]
   node [
     fontname="Courier"
     fontsize=12.0
   ]
   edge [
     fontname="Times-Italic"
     fontsize=12.0
   ]

   "start" [fontname="Times-Italic" shape=plain label=<  start  > style=invis]
   {
     rank="same"
     "tp_new" [href="typeobj.html#c.PyTypeObject.tp_new" target="_top"]
     "tp_alloc" [href="typeobj.html#c.PyTypeObject.tp_alloc" target="_top"]
   }
   "tp_init" [href="typeobj.html#c.PyTypeObject.tp_init" target="_top"]
   "reachable" [fontname="Times-Italic" shape=box]
   "tp_traverse" [
     href="typeobj.html#c.PyTypeObject.tp_traverse"
     ordering="in"
     target="_top"
   ]
   "finalized?" [
     fontname="Times-Italic"
     label=<marked as<br/>finalized?>
     ordering="in"
     shape=diamond
     tooltip="marked as finalized?"
   ]
   "tp_finalize" [
     href="typeobj.html#c.PyTypeObject.tp_finalize"
     ordering="in"
     target="_top"
   ]
   "tp_clear" [href="typeobj.html#c.PyTypeObject.tp_clear" target="_top"]
   "uncollectable" [
     fontname="Times-Italic"
     label=<uncollectable<br/>(leaked)>
     shape=box
     tooltip="uncollectable (leaked)"
   ]
   "tp_dealloc" [
     href="typeobj.html#c.PyTypeObject.tp_dealloc"
     ordering="in"
     target="_top"
   ]
   "tp_free" [href="typeobj.html#c.PyTypeObject.tp_free" target="_top"]

   "start" -> "tp_new" [
     label=<    type call  >
   ]
   "tp_new" -> "tp_alloc" [
     label=<  direct call  > arrowhead=empty
     labeltooltip="tp_new to tp_alloc: direct call"
     tooltip="tp_new to tp_alloc: direct call"
   ]
   "tp_new" -> "tp_init" [tooltip="tp_new to tp_init"]
   "tp_init" -> "reachable" [tooltip="tp_init to reachable"]
   "reachable" -> "tp_traverse" [
     dir="back"
     label=<  not in a  <br/>  cyclic  <br/>  isolate  >
     labeltooltip="tp_traverse to reachable: not in a cyclic isolate"
     tooltip="tp_traverse to reachable: not in a cyclic isolate"
   ]
   "reachable" -> "tp_traverse" [
     label=<  periodic  <br/>  cyclic isolate   <br/>  detection  >
     labeltooltip="reachable to tp_traverse: periodic cyclic isolate detection"
     tooltip="reachable to tp_traverse: periodic cyclic isolate detection"
   ]
   "reachable" -> "tp_init" [tooltip="reachable to tp_init"]
   "reachable" -> "tp_finalize" [
     dir="back"
     label=<  resurrected  <br/>  (maybe remove  <br/>  finalized mark)  >
     labeltooltip="tp_finalize to reachable: resurrected (maybe remove finalized mark)"
     tooltip="tp_finalize to reachable: resurrected (maybe remove finalized mark)"
   ]
   "tp_traverse" -> "finalized?" [
     label=<  cyclic  <br/>  isolate  >
     labeltooltip="tp_traverse to finalized?: cyclic isolate"
     tooltip="tp_traverse to finalized?: cyclic isolate"
   ]
   "reachable" -> "finalized?" [
     label=<  no refs  >
     labeltooltip="reachable to finalized?: no refs"
     tooltip="reachable to finalized?: no refs"
   ]
   "finalized?" -> "tp_finalize" [
     label=<  no (mark  <br/>  as finalized)  >
     labeltooltip="finalized? to tp_finalize: no (mark as finalized)"
     tooltip="finalized? to tp_finalize: no (mark as finalized)"
   ]
   "finalized?" -> "tp_clear" [
     label=<  yes  >
     labeltooltip="finalized? to tp_clear: yes"
     tooltip="finalized? to tp_clear: yes"
   ]
   "tp_finalize" -> "tp_clear" [
     label=<  no refs or   <br/>  cyclic isolate  >
     labeltooltip="tp_finalize to tp_clear: no refs or cyclic isolate"
     tooltip="tp_finalize to tp_clear: no refs or cyclic isolate"
   ]
   "tp_finalize" -> "tp_dealloc" [
     arrowtail=empty
     dir="back"
     href="lifecycle.html#c.PyObject_CallFinalizerFromDealloc"
     style=dashed
     label=<  recommended<br/>  call (see<br/>  explanation)>
     labeltooltip="tp_dealloc to tp_finalize: recommended call (see explanation)"
     target="_top"
     tooltip="tp_dealloc to tp_finalize: recommended call (see explanation)"
   ]
   "tp_finalize" -> "tp_dealloc" [
     label=<   no refs  >
     labeltooltip="tp_finalize to tp_dealloc: no refs"
     tooltip="tp_finalize to tp_dealloc: no refs"
   ]
   "tp_clear" -> "tp_dealloc" [
     label=<  no refs  >
     labeltooltip="tp_clear to tp_dealloc: no refs"
     tooltip="tp_clear to tp_dealloc: no refs"
   ]
   "tp_clear" -> "uncollectable" [
     label=<  cyclic  <br/>  isolate  >
     labeltooltip="tp_clear to uncollectable: cyclic isolate"
     tooltip="tp_clear to uncollectable: cyclic isolate"
   ]
   "uncollectable" -> "tp_dealloc" [
     style=invis
     tooltip="uncollectable to tp_dealloc"
   ]
   "reachable" -> "uncollectable" [
     label=<  cyclic  <br/>  isolate  <br/>  (no GC  <br/>  support)  >
     labeltooltip="reachable to uncollectable: cyclic isolate (no GC support)"
     tooltip="reachable to uncollectable: cyclic isolate (no GC support)"
   ]
   "reachable" -> "tp_dealloc" [
     label=<  no refs>
     labeltooltip="reachable to tp_dealloc: no refs"
   ]
   "tp_dealloc" -> "tp_free" [
     arrowhead=empty
     label=<    direct call  >
     labeltooltip="tp_dealloc to tp_free: direct call"
     tooltip="tp_dealloc to tp_free: direct call"
   ]
}