Skip to content

Commit 41a730a

Browse files
authored
Mark certain JS library functions as __noleakcheck (#24146)
The functions all allocate on first use and cache the results, never freeing. Marking them as `__noleakcheck` avoids lsan false positives.
1 parent d4a7433 commit 41a730a

File tree

3 files changed

+18
-0
lines changed

3 files changed

+18
-0
lines changed

src/lib/libegl.js

+2
Original file line numberDiff line numberDiff line change
@@ -507,6 +507,8 @@ var LibraryEGL = {
507507
eglGetError: () => EGL.errorCode,
508508

509509
// EGLAPI const char * EGLAPIENTRY eglQueryString(EGLDisplay dpy, EGLint name);
510+
// The allocated strings are cached and never freed.
511+
eglQueryString__noleakcheck: true,
510512
eglQueryString__deps: ['$stringToNewUTF8'],
511513
eglQueryString__proxy: 'sync',
512514
eglQueryString: (display, name) => {

src/lib/libhtml5.js

+14
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,7 @@ var LibraryHTML5 = {
249249
},
250250
},
251251

252+
$registerKeyEventCallback__noleakcheck: true,
252253
$registerKeyEventCallback__deps: ['$JSEvents', '$findEventTarget', '$stringToUTF8', 'malloc'],
253254
$registerKeyEventCallback: (target, userData, useCapture, callbackfunc, eventTypeId, eventTypeString, targetThread) => {
254255
#if PTHREADS
@@ -477,6 +478,7 @@ var LibraryHTML5 = {
477478
HEAP32[idx + {{{ C_STRUCTS.EmscriptenMouseEvent.targetY / 4 }}}] = e.clientY - (rect.top | 0);
478479
},
479480

481+
$registerMouseEventCallback__noleakcheck: true,
480482
$registerMouseEventCallback__deps: ['$JSEvents', '$fillMouseEventData', '$findEventTarget', 'malloc'],
481483
$registerMouseEventCallback: (target, userData, useCapture, callbackfunc, eventTypeId, eventTypeString, targetThread) => {
482484
#if PTHREADS
@@ -568,6 +570,7 @@ var LibraryHTML5 = {
568570
return {{{ cDefs.EMSCRIPTEN_RESULT_SUCCESS }}};
569571
},
570572

573+
$registerWheelEventCallback__noleakcheck: true,
571574
$registerWheelEventCallback__deps: ['$JSEvents', '$fillMouseEventData', 'malloc'],
572575
$registerWheelEventCallback: (target, userData, useCapture, callbackfunc, eventTypeId, eventTypeString, targetThread) => {
573576
#if PTHREADS
@@ -619,6 +622,7 @@ var LibraryHTML5 = {
619622
}
620623
},
621624

625+
$registerUiEventCallback__noleakcheck: true,
622626
$registerUiEventCallback__deps: ['$JSEvents', '$findEventTarget', 'malloc'],
623627
$registerUiEventCallback: (target, userData, useCapture, callbackfunc, eventTypeId, eventTypeString, targetThread) => {
624628
#if PTHREADS
@@ -691,6 +695,7 @@ var LibraryHTML5 = {
691695
emscripten_set_scroll_callback_on_thread: (target, userData, useCapture, callbackfunc, targetThread) =>
692696
registerUiEventCallback(target, userData, useCapture, callbackfunc, {{{ cDefs.EMSCRIPTEN_EVENT_SCROLL }}}, "scroll", targetThread),
693697

698+
$registerFocusEventCallback__noleakcheck: true,
694699
$registerFocusEventCallback__deps: ['$JSEvents', '$findEventTarget', 'malloc', '$stringToUTF8'],
695700
$registerFocusEventCallback: (target, userData, useCapture, callbackfunc, eventTypeId, eventTypeString, targetThread) => {
696701
#if PTHREADS
@@ -754,6 +759,7 @@ var LibraryHTML5 = {
754759
{{{ makeSetValue('eventStruct', C_STRUCTS.EmscriptenDeviceOrientationEvent.absolute, 'e.absolute', 'i8') }}};
755760
},
756761

762+
$registerDeviceOrientationEventCallback__noleakcheck: true,
757763
$registerDeviceOrientationEventCallback__deps: ['$JSEvents', '$fillDeviceOrientationEventData', '$findEventTarget'],
758764
$registerDeviceOrientationEventCallback: (target, userData, useCapture, callbackfunc, eventTypeId, eventTypeString, targetThread) => {
759765
#if PTHREADS
@@ -823,6 +829,7 @@ var LibraryHTML5 = {
823829
{{{ makeSetValue('eventStruct', C_STRUCTS.EmscriptenDeviceMotionEvent.rotationRateGamma, 'rr["gamma"]', 'double') }}};
824830
},
825831

832+
$registerDeviceMotionEventCallback__noleakcheck: true,
826833
$registerDeviceMotionEventCallback__deps: ['$JSEvents', '$fillDeviceMotionEventData', '$findEventTarget', 'malloc'],
827834
$registerDeviceMotionEventCallback: (target, userData, useCapture, callbackfunc, eventTypeId, eventTypeString, targetThread) => {
828835
#if PTHREADS
@@ -905,6 +912,7 @@ var LibraryHTML5 = {
905912
{{{ makeSetValue('eventStruct', C_STRUCTS.EmscriptenOrientationChangeEvent.orientationAngle, 'orientationAngle', 'i32') }}};
906913
},
907914

915+
$registerOrientationChangeEventCallback__noleakcheck: true,
908916
$registerOrientationChangeEventCallback__deps: ['$JSEvents', '$fillOrientationChangeEventData', 'malloc'],
909917
$registerOrientationChangeEventCallback: (target, userData, useCapture, callbackfunc, eventTypeId, eventTypeString, targetThread) => {
910918
#if PTHREADS
@@ -1017,6 +1025,7 @@ var LibraryHTML5 = {
10171025
}
10181026
},
10191027

1028+
$registerFullscreenChangeEventCallback__noleakcheck: true,
10201029
$registerFullscreenChangeEventCallback__deps: ['$JSEvents', '$fillFullscreenChangeEventData', 'malloc'],
10211030
$registerFullscreenChangeEventCallback: (target, userData, useCapture, callbackfunc, eventTypeId, eventTypeString, targetThread) => {
10221031
#if PTHREADS
@@ -1556,6 +1565,7 @@ var LibraryHTML5 = {
15561565
stringToUTF8(id, eventStruct + {{{ C_STRUCTS.EmscriptenPointerlockChangeEvent.id }}}, {{{ cDefs.EM_HTML5_LONG_STRING_LEN_BYTES }}});
15571566
},
15581567

1568+
$registerPointerlockChangeEventCallback__noleakcheck: true,
15591569
$registerPointerlockChangeEventCallback__deps: ['$JSEvents', '$fillPointerlockChangeEventData', 'malloc'],
15601570
$registerPointerlockChangeEventCallback: (target, userData, useCapture, callbackfunc, eventTypeId, eventTypeString, targetThread) => {
15611571
#if PTHREADS
@@ -1785,6 +1795,7 @@ var LibraryHTML5 = {
17851795
{{{ makeSetValue('eventStruct', C_STRUCTS.EmscriptenVisibilityChangeEvent.visibilityState, 'visibilityState', 'i32') }}};
17861796
},
17871797

1798+
$registerVisibilityChangeEventCallback__noleakcheck: true,
17881799
$registerVisibilityChangeEventCallback__deps: ['$JSEvents', '$fillVisibilityChangeEventData', 'malloc'],
17891800
$registerVisibilityChangeEventCallback: (target, userData, useCapture, callbackfunc, eventTypeId, eventTypeString, targetThread) => {
17901801
#if PTHREADS
@@ -1839,6 +1850,7 @@ var LibraryHTML5 = {
18391850
return {{{ cDefs.EMSCRIPTEN_RESULT_SUCCESS }}};
18401851
},
18411852

1853+
$registerTouchEventCallback__noleakcheck: true,
18421854
$registerTouchEventCallback__deps: ['$JSEvents', '$findEventTarget', '$getBoundingClientRect', 'malloc'],
18431855
$registerTouchEventCallback: (target, userData, useCapture, callbackfunc, eventTypeId, eventTypeString, targetThread) => {
18441856
#if PTHREADS
@@ -1987,6 +1999,7 @@ var LibraryHTML5 = {
19871999
stringToUTF8(e.mapping, eventStruct + {{{ C_STRUCTS.EmscriptenGamepadEvent.mapping }}}, {{{ cDefs.EM_HTML5_MEDIUM_STRING_LEN_BYTES }}});
19882000
},
19892001

2002+
$registerGamepadEventCallback__noleakcheck: true,
19902003
$registerGamepadEventCallback__deps: ['$JSEvents', '$fillGamepadEventData', '$findEventTarget', 'malloc'],
19912004
$registerGamepadEventCallback: (target, userData, useCapture, callbackfunc, eventTypeId, eventTypeString, targetThread) => {
19922005
#if PTHREADS
@@ -2127,6 +2140,7 @@ var LibraryHTML5 = {
21272140

21282141
$battery: () => navigator.battery || navigator.mozBattery || navigator.webkitBattery,
21292142

2143+
$registerBatteryEventCallback__noleakcheck: true,
21302144
$registerBatteryEventCallback__deps: ['$JSEvents', '$fillBatteryEventData', '$battery', '$findEventTarget', 'malloc'],
21312145
$registerBatteryEventCallback: (target, userData, useCapture, callbackfunc, eventTypeId, eventTypeString, targetThread) => {
21322146
#if PTHREADS

src/lib/libwebgl.js

+2
Original file line numberDiff line numberDiff line change
@@ -1287,6 +1287,8 @@ for (/**@suppress{duplicate}*/var i = 0; i <= {{{ GL_POOL_TEMP_BUFFERS_SIZE }}};
12871287
GLctx.pixelStorei(pname, param);
12881288
},
12891289

1290+
// The allocated strings are cached and never freed.
1291+
glGetString__noleakcheck: true,
12901292
glGetString__deps: ['$stringToNewUTF8', '$webglGetExtensions'],
12911293
glGetString: (name_) => {
12921294
var ret = GL.stringCache[name_];

0 commit comments

Comments
 (0)