diff --git a/src/serve_light.js b/src/serve_light.js index 13aa84c73..48ed8b679 100644 --- a/src/serve_light.js +++ b/src/serve_light.js @@ -6,6 +6,7 @@ export const serve_rendered = { init: (options, repo, programOpts) => {}, add: (options, repo, params, id, programOpts, dataResolver) => {}, remove: (repo, id) => {}, + clear: (repo) => {}, getTerrainElevation: (data, param) => { param['elevation'] = 'not supported in light'; return param; diff --git a/src/serve_rendered.js b/src/serve_rendered.js index 3dc3cd546..64804d7ef 100644 --- a/src/serve_rendered.js +++ b/src/serve_rendered.js @@ -15,7 +15,6 @@ import '@maplibre/maplibre-gl-native'; import advancedPool from 'advanced-pool'; import path from 'path'; import url from 'url'; -import util from 'util'; import sharp from 'sharp'; import clone from 'clone'; import Color from 'color'; @@ -1458,7 +1457,25 @@ export const serve_rendered = { } delete repo[id]; }, - + /** + * Removes all items from the repository. + * @param {object} repo Repository object. + * @returns {void} + */ + clear: function (repo) { + Object.keys(repo).forEach((id) => { + const item = repo[id]; + if (item) { + item.map.renderers.forEach((pool) => { + pool.close(); + }); + item.map.renderersStatic.forEach((pool) => { + pool.close(); + }); + } + delete repo[id]; + }); + }, /** * Get the elevation of terrain tile data by rendering it to a canvas image * @param {object} data The background color (or empty string for transparent). diff --git a/src/server.js b/src/server.js index 9a3f8a8e6..82a6490b0 100644 --- a/src/server.js +++ b/src/server.js @@ -743,6 +743,7 @@ async function start(opts) { app, server, startupPromise, + serving, }; } /** @@ -777,8 +778,13 @@ export async function server(opts) { running.server.shutdown(async () => { const restarted = await start(opts); + if (!isLight) { + serve_rendered.clear(running.serving.rendered); + } running.server = restarted.server; running.app = restarted.app; + running.startupPromise = restarted.startupPromise; + running.serving = restarted.serving; }); }); return running;