View | Details | Raw Unified | Return to bug 16166
Collapse All | Expand All

(-)a/Koha/Cache.pm (-16 / +16 lines)
Lines 281-294 sub set_in_cache { Link Here
281
    $expiry //= $self->{timeout};
281
    $expiry //= $self->{timeout};
282
    my $set_sub = $self->{ref($self->{$cache}) . "_set"};
282
    my $set_sub = $self->{ref($self->{$cache}) . "_set"};
283
283
284
    my $flag = '-CF0'; # 0: scalar, 1: freezed data structure
284
    my $flag = '-CF0'; # 0: scalar, 1: frozen data structure
285
    # Set in L1 cache
285
    # Set in L1 cache
286
    if (ref($value)) {
286
    if (ref($value)) {
287
        $value = freeze($value);
287
        my $frozen= freeze($value);
288
        $L1_cache{ $key } = [ (undef, $value) ];
288
        $L1_cache{ $key } = { value => $value, frozen => $frozen };
289
        $value = $frozen;
289
        $flag = '-CF1';
290
        $flag = '-CF1';
290
    } else {
291
    } else {
291
        $L1_cache{ $key } = $value;
292
        $L1_cache{ $key } = { value => $value };
292
    }
293
    }
293
294
294
    $value .= $flag;
295
    $value .= $flag;
Lines 329-344 sub get_from_cache { Link Here
329
330
330
    # Return L1 cache value if exists
331
    # Return L1 cache value if exists
331
    if ( exists $L1_cache{$key} ) {
332
    if ( exists $L1_cache{$key} ) {
332
        if (ref($L1_cache{$key})) {
333
        if (ref($L1_cache{$key}{value})) {
333
            if ($unsafe) {
334
            if ($unsafe) {
334
                $L1_cache{$key}->[0] ||= thaw($L1_cache{$key}->[1]);
335
                return $L1_cache{$key}->{value};
335
                return $L1_cache{$key}->[0];
336
            } else {
336
            } else {
337
                return thaw($L1_cache{$key}->[1]);
337
                return thaw($L1_cache{$key}{frozen});
338
            }
338
            }
339
        } else {
339
        } else {
340
            # No need to deep copy if it's a scalar
340
            # No need to thaw if it's a scalar
341
            return $L1_cache{$key};
341
            return $L1_cache{$key}{value};
342
        }
342
        }
343
    }
343
    }
344
344
Lines 351-365 sub get_from_cache { Link Here
351
    my $flag = substr($value, -4, 4, '');
351
    my $flag = substr($value, -4, 4, '');
352
    if ($flag eq '-CF0') {
352
    if ($flag eq '-CF0') {
353
        # it's a scalar
353
        # it's a scalar
354
        $L1_cache{$key} = $value;
354
        $L1_cache{$key} = { value => $value };
355
        return $value;
355
        return $value;
356
    } elsif ($flag eq '-CF1') {
356
    } elsif ($flag eq '-CF1') {
357
        # it's a freezed data structure
357
        # it's a frozen data structure
358
        my $frozen = freeze($value);
359
        $L1_cache{$key} = { value => $value, frozen => $frozen };
360
        return $value;
358
        my $thawed;
361
        my $thawed;
359
        eval { $thawed = thaw($value); };
362
        eval { $thawed = thaw($frozen); };
360
        return if $@;
363
        return if $@;
361
        $L1_cache{$key} = [ (undef, $value) ];
362
        $L1_cache{$key}->[0] = $thawed if $unsafe;
363
        return $thawed;
364
        return $thawed;
364
    }
365
    }
365
366
366
- 

Return to bug 16166