The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
CHANGES 07
HACKING 03
MANIFEST 02
MANIFEST.SKIP 01
META.json 042
META.yml 1122
lib/Gearman/Server/Client.pm 013
lib/Gearman/Server.pm 11
8 files changed (This is a version diff) 1291
@@ -1,3 +1,10 @@
+1.12 2014-12-14
+
+        * Add HACKING file
+
+        * Fix memory leak when clients disconnect (sleeper list isn't pruned).
+          Fixes CPAN RT 70728 (Marsh Yamazaki)
+
 1.11 2010-01-17
 
         * Don't get stuck in the wakeup loop. Dummy.
@@ -0,0 +1,3 @@
+http://contributing.appspot.com/gearman
+
+Please submit patches to the mailing list
@@ -8,3 +8,5 @@ Makefile.PL
 MANIFEST			This list of files
 MANIFEST.SKIP
 META.yml			Module meta-data (added by MakeMaker)
+HACKING
+META.json                                Module JSON meta-data (added by MakeMaker)
@@ -3,6 +3,7 @@
 \bCVS\b
 ,v$
 \B\.svn\b
+\.git
 
 # Avoid Makemaker generated and utility files.
 \bMANIFEST\.bak
@@ -0,0 +1,42 @@
+{
+   "abstract" : "function call \"router\" and load balancer",
+   "author" : [
+      "Brad Fitzpatrick (brad@danga.com), Brad Whitaker (whitaker@danga.com)"
+   ],
+   "dynamic_config" : 1,
+   "generated_by" : "ExtUtils::MakeMaker version 6.76, CPAN::Meta::Converter version 2.132510",
+   "license" : [
+      "unknown"
+   ],
+   "meta-spec" : {
+      "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
+      "version" : "2"
+   },
+   "name" : "Gearman-Server",
+   "no_index" : {
+      "directory" : [
+         "t",
+         "inc"
+      ]
+   },
+   "prereqs" : {
+      "build" : {
+         "requires" : {
+            "ExtUtils::MakeMaker" : "0"
+         }
+      },
+      "configure" : {
+         "requires" : {
+            "ExtUtils::MakeMaker" : "0"
+         }
+      },
+      "runtime" : {
+         "requires" : {
+            "Danga::Socket" : "1.52",
+            "Gearman::Util" : "0"
+         }
+      }
+   },
+   "release_status" : "stable",
+   "version" : "1.12"
+}
@@ -1,12 +1,23 @@
-# http://module-build.sourceforge.net/META-spec.html
-#XXXXXXX This is a prototype!!!  It will change in the future!!! XXXXX#
-name:         Gearman-Server
-version:      1.11
-version_from: lib/Gearman/Server.pm
-installdirs:  site
+---
+abstract: "function call \"router\" and load balancer"
+author:
+  - 'Brad Fitzpatrick (brad@danga.com), Brad Whitaker (whitaker@danga.com)'
+build_requires:
+  ExtUtils::MakeMaker: 0
+configure_requires:
+  ExtUtils::MakeMaker: 0
+dynamic_config: 1
+generated_by: 'ExtUtils::MakeMaker version 6.76, CPAN::Meta::Converter version 2.132510'
+license: unknown
+meta-spec:
+  url: http://module-build.sourceforge.net/META-spec-v1.4.html
+  version: 1.4
+name: Gearman-Server
+no_index:
+  directory:
+    - t
+    - inc
 requires:
-    Danga::Socket:                 1.52
-    Gearman::Util:                 0
-
-distribution_type: module
-generated_by: ExtUtils::MakeMaker version 6.30
+  Danga::Socket: 1.52
+  Gearman::Util: 0
+version: 1.12
@@ -92,9 +92,22 @@ sub close {
     # Remove self from sleepers, otherwise it will be leaked if another worker
     # for the job never connects.
     my $sleepers = $self->{server}{sleepers};
+    my $sleepers_list = $self->{server}{sleepers_list};
     for my $job (@{ $self->{can_do_list} }) {
         my $sleeping = $sleepers->{$job};
         delete $sleeping->{$self};
+
+        my $new_sleepers_list;
+        for my $client (@{$sleepers_list->{$job}}) {
+            next unless $client;
+            push @{$new_sleepers_list}, $client unless $sleeping->{$client};
+        }
+        if ($new_sleepers_list) {
+            $self->{server}{sleepers_list}->{$job} = $new_sleepers_list;
+        } else {
+            delete $self->{server}{sleepers_list}->{$job};
+        }
+
         delete $sleepers->{$job} unless %$sleeping;
     }
 
@@ -48,7 +48,7 @@ use fields (
             'wakeup_timers', # func -> timer, timer to be canceled or adjusted when job grab/inject is called
             );
 
-our $VERSION = "1.11";
+our $VERSION = "1.12";
 
 =head1 METHODS