$portal->templateDir causes skin mix-up
Concerned version
Version: 2.0.14
Summary
Symptom 1:
- To trigger the bug, create two skins:
-
mytheme
contains an override to header.tpl -
mytheme2
does not contain it - Open the portal with mytheme
- Switch to mytheme2
- The
header.tpl
from mytheme gets displayed in mytheme2!
Symptom 2:
- After many portal requests (it takes >1000 to have a visible effect), requests become slow, do a lot of syscalls and IO, memory usage increases
Logs
LLNG[44557]: [debug] portal self templateDir $VAR1 = [
'/usr/share/lemonldap-ng/portal/templates/mytheme2',
'/usr/share/lemonldap-ng/portal/templates/mytheme2',
'/usr/share/lemonldap-ng/portal/templates/mytheme2',
'/usr/share/lemonldap-ng/portal/templates/mytheme',
'/usr/share/lemonldap-ng/portal/templates/mytheme2',
'/usr/share/lemonldap-ng/portal/templates/bootstrap',
'/usr/share/lemonldap-ng/portal/templates/bootstrap',
'/usr/share/lemonldap-ng/portal/templates/bootstrap'
Possible fixes
sub sendHtml {
my ( $self, $req, $template, %args ) = @_;
my $templateDir = $self->conf->{templateDir} . '/' . $self->getSkin($req);
$self->templateDir( [ $templateDir, @{ $self->templateDir } ] );
We should modify portal sendHtml to transmit the current skin to ::Common::PSGI::sendHTML without modifying the $self->templateDir property
A deeper rework of templateDir should also be done, see #2788