@@ -24,20 +24,27 @@ type DownloadEvent struct {
24
24
}
25
25
26
26
func (s * DownloadEvent ) AfterFind () {
27
+ SpaceDock .DBRecursionLock .Lock ()
27
28
if _ , ok := SpaceDock .DBRecursion [utils .CurrentGoroutineID ()]; ! ok {
28
29
SpaceDock .DBRecursion [utils .CurrentGoroutineID ()] = 0
29
30
}
30
- if SpaceDock .DBRecursion [utils .CurrentGoroutineID ()] == SpaceDock .DBRecursionMax {
31
+ if SpaceDock .DBRecursion [utils .CurrentGoroutineID ()] >= SpaceDock .DBRecursionMax {
32
+ SpaceDock .DBRecursionLock .Unlock ()
31
33
return
32
34
}
33
35
isRoot := SpaceDock .DBRecursion [utils .CurrentGoroutineID ()] == 0
34
36
SpaceDock .DBRecursion [utils .CurrentGoroutineID ()] += 1
37
+ SpaceDock .DBRecursionLock .Unlock ()
38
+
35
39
SpaceDock .Database .Model (s ).Related (& (s .Mod ), "Mod" )
36
40
SpaceDock .Database .Related (& (s .Version ), "Version" )
41
+
42
+ SpaceDock .DBRecursionLock .Lock ()
37
43
SpaceDock .DBRecursion [utils .CurrentGoroutineID ()] -= 1
38
44
if isRoot {
39
45
delete (SpaceDock .DBRecursion , utils .CurrentGoroutineID ())
40
46
}
47
+ SpaceDock .DBRecursionLock .Unlock ()
41
48
}
42
49
43
50
func NewDownloadEvent (mod Mod , version ModVersion ) * DownloadEvent {
@@ -64,19 +71,26 @@ type FollowEvent struct {
64
71
}
65
72
66
73
func (s * FollowEvent ) AfterFind () {
74
+ SpaceDock .DBRecursionLock .Lock ()
67
75
if _ , ok := SpaceDock .DBRecursion [utils .CurrentGoroutineID ()]; ! ok {
68
76
SpaceDock .DBRecursion [utils .CurrentGoroutineID ()] = 0
69
77
}
70
- if SpaceDock .DBRecursion [utils .CurrentGoroutineID ()] == SpaceDock .DBRecursionMax {
78
+ if SpaceDock .DBRecursion [utils .CurrentGoroutineID ()] >= SpaceDock .DBRecursionMax {
79
+ SpaceDock .DBRecursionLock .Unlock ()
71
80
return
72
81
}
73
82
isRoot := SpaceDock .DBRecursion [utils .CurrentGoroutineID ()] == 0
74
83
SpaceDock .DBRecursion [utils .CurrentGoroutineID ()] += 1
84
+ SpaceDock .DBRecursionLock .Unlock ()
85
+
75
86
SpaceDock .Database .Model (s ).Related (& (s .Mod ), "Mod" )
87
+
88
+ SpaceDock .DBRecursionLock .Lock ()
76
89
SpaceDock .DBRecursion [utils .CurrentGoroutineID ()] -= 1
77
90
if isRoot {
78
91
delete (SpaceDock .DBRecursion , utils .CurrentGoroutineID ())
79
92
}
93
+ SpaceDock .DBRecursionLock .Unlock ()
80
94
}
81
95
82
96
func NewFollowEvent (mod Mod ) * FollowEvent {
@@ -102,19 +116,26 @@ type ReferralEvent struct {
102
116
}
103
117
104
118
func (s * ReferralEvent ) AfterFind () {
119
+ SpaceDock .DBRecursionLock .Lock ()
105
120
if _ , ok := SpaceDock .DBRecursion [utils .CurrentGoroutineID ()]; ! ok {
106
121
SpaceDock .DBRecursion [utils .CurrentGoroutineID ()] = 0
107
122
}
108
- if SpaceDock .DBRecursion [utils .CurrentGoroutineID ()] == SpaceDock .DBRecursionMax {
123
+ if SpaceDock .DBRecursion [utils .CurrentGoroutineID ()] >= SpaceDock .DBRecursionMax {
124
+ SpaceDock .DBRecursionLock .Unlock ()
109
125
return
110
126
}
111
127
isRoot := SpaceDock .DBRecursion [utils .CurrentGoroutineID ()] == 0
112
128
SpaceDock .DBRecursion [utils .CurrentGoroutineID ()] += 1
129
+ SpaceDock .DBRecursionLock .Unlock ()
130
+
113
131
SpaceDock .Database .Model (s ).Related (& (s .Mod ), "Mod" )
132
+
133
+ SpaceDock .DBRecursionLock .Lock ()
114
134
SpaceDock .DBRecursion [utils .CurrentGoroutineID ()] -= 1
115
135
if isRoot {
116
136
delete (SpaceDock .DBRecursion , utils .CurrentGoroutineID ())
117
137
}
138
+ SpaceDock .DBRecursionLock .Unlock ()
118
139
}
119
140
120
141
func NewReferralEvent (mod Mod , host string ) * ReferralEvent {
0 commit comments