# # This is a patch for the sync-plan package, which connects the netplan # daemon with the 3Com PalmPilot. The original package can be found on # ftp://ryeham.ee.ryerson.ca/pub/PalmOS . It has a bug that causes random # aborts when large amounts of data are synced. This patch fixes it. Use # the GNU "patch" utility to apply to sync-plan. # # Contributed by Joerg Weber # # This patch was submitted to Kenneth Albanowski for # inclusion in the sync-plan on 10 Dec 1998. Newer versions of sync-plan # may already contain this patch. # *** sync-plan Fri Sep 25 19:12:09 1998 --- sync-plan_orig Fri Sep 25 19:14:01 1998 *************** *** 7,19 **** use PDA::Pilot; use Data::Dumper; - sub id_v2netplan { $id="=plan\n"; SendPlanCommand($socket, $id); } - sub DatePlanToPerl { my($PlanDate) = @_; my($m,$d,$y) = split(m!/!,$PlanDate); --- 7,17 ---- *************** *** 333,339 **** splice @output, $i, 0, @US; } ! # print "Generated record |",join("\n", @output),"|\n"; join("\n",@output); } --- 331,337 ---- splice @output, $i, 0, @US; } ! print "Generated record |",join("\n", @output),"|\n"; join("\n",@output); } *************** *** 576,581 **** --- 574,583 ---- sub doafterplan { + + $ticklecount = 0; # Reset ticklecount + $doticklecount = 100; # Tickle every 100 loop + my($db,$socket,$control) = @_; print "After stuff:\n"; *************** *** 624,629 **** --- 626,638 ---- print "Pilot loop\n"; foreach (keys %pilotID) { + + # Tickle the pilot so it will not time out during this + $ticklecount++; + if ($ticklecount >= $doticklecount) { + $dlp->tickle(); + $ticklecount = 0; + } # Pilot records originally downloaded from a different Plan database # are off-limits during this pass. *************** *** 631,637 **** next if $dbname{$_} ne $control->{name}; ! # print "Pilot record: ",PrintPilotRecord($pilotID{$_}),"\n"; #print "Pilot record: ",Dumper($pilotID{$_}),"\n"; if ($pilotID{$_}->{deleted} || $pilotID{$_}->{archived}) { # --- 640,646 ---- next if $dbname{$_} ne $control->{name}; ! print "Pilot record: ",PrintPilotRecord($pilotID{$_}),"\n"; #print "Pilot record: ",Dumper($pilotID{$_}),"\n"; if ($pilotID{$_}->{deleted} || $pilotID{$_}->{archived}) { # *************** *** 684,690 **** # Action: Install the Pilot record in Plan, regardless of # changed status ! # print "Action: Install Pilot record in Plan.\n"; #print "Installing pilot record in plan: ",Dumper($pilotID{$_}); --- 693,699 ---- # Action: Install the Pilot record in Plan, regardless of # changed status ! print "Action: Install Pilot record in Plan.\n"; #print "Installing pilot record in plan: ",Dumper($pilotID{$_}); *************** *** 843,849 **** print "Plan loop\n"; foreach (keys %planRecord) { ! # print "Plan record: ",PrintPlanRecord($planRecord{$_}),"\n"; my($record) = $planRecord{$_}; my($pid) = $planRecord{$_}->{pilotid}; --- 852,866 ---- print "Plan loop\n"; foreach (keys %planRecord) { ! ! # Tickle the pilot so it will not time out during this ! $ticklecount++; ! if ($ticklecount >= $doticklecount) { ! $dlp->tickle(); ! $ticklecount = 0; ! } ! ! print "Plan record: ",PrintPlanRecord($planRecord{$_}),"\n"; my($record) = $planRecord{$_}; my($pid) = $planRecord{$_}->{pilotid}; *************** *** 905,911 **** # Action: Install the Plan record in Pilot, regardless of # changed status ! # print "Action: Install Plan record in Pilot.\n"; #print "Installing plan record in pilot: ",Dumper($record); #print "Trying to install Plan record: ",Dumper($record),"\n"; --- 922,928 ---- # Action: Install the Plan record in Pilot, regardless of # changed status ! print "Action: Install Plan record in Pilot.\n"; #print "Installing plan record in pilot: ",Dumper($record); #print "Trying to install Plan record: ",Dumper($record),"\n"; *************** *** 932,938 **** my($id) = WritePilotRecord($db,$control,$newrecord); #$db->setRecord($newrecord); ! # print "ID of new Pilot record is $id\n"; #my ($hash) = HashPilotRecord($newrecord); #$pilothash{$id} = $hash; --- 949,955 ---- my($id) = WritePilotRecord($db,$control,$newrecord); #$db->setRecord($newrecord); ! print "ID of new Pilot record is $id\n"; #my ($hash) = HashPilotRecord($newrecord); #$pilothash{$id} = $hash; *************** *** 1028,1040 **** foreach (keys %pilotID) { # Pilot records originally downloaded from a different Plan database # are off-limits during this pass. next if $dbname{$_} ne $control->{name}; #print "Pilot record: ",Dumper($pilotID{$_}),"\n"; ! # print "Pilot record: ",PrintPilotRecord($pilotID{$_}),"\n"; if ($pilotID{$_}->{deleted} || $pilotID{$_}->{archived}) { # At this point are seeing Pilot records marked as deleted or --- 1045,1065 ---- foreach (keys %pilotID) { + # Tickle the pilot so it will not time out during this + $ticklecount++; + if ($ticklecount >= $doticklecount) { + $dlp->tickle(); + $ticklecount = 0; + } + + # Pilot records originally downloaded from a different Plan database # are off-limits during this pass. next if $dbname{$_} ne $control->{name}; #print "Pilot record: ",Dumper($pilotID{$_}),"\n"; ! print "Pilot record: ",PrintPilotRecord($pilotID{$_}),"\n"; if ($pilotID{$_}->{deleted} || $pilotID{$_}->{archived}) { # At this point are seeing Pilot records marked as deleted or *************** *** 1044,1053 **** # Action: If there is an associated Plan record that has not # already been deleted, delete it. ! # print "Log: Deleting Pilot record.\n"; if (defined $planID{$_} and not $planID{$_}->{deleted}) { ! # print "Log: ... and associated Plan record.\n"; DeletePlanRecord($socket, $planID{$_}); delete $planRecord{$planID{$_}->{id}}; delete $planID{$_}; --- 1069,1078 ---- # Action: If there is an associated Plan record that has not # already been deleted, delete it. ! print "Log: Deleting Pilot record.\n"; if (defined $planID{$_} and not $planID{$_}->{deleted}) { ! print "Log: ... and associated Plan record.\n"; DeletePlanRecord($socket, $planID{$_}); delete $planRecord{$planID{$_}->{id}}; delete $planID{$_}; *************** *** 1067,1077 **** print "Plan delete loop\n"; foreach (keys %planRecord) { my($record) = $planRecord{$_}; my($pid) = $planRecord{$_}->{pilotid}; ! # print "Plan record: ",Dumper($record),"\n"; ! # print "Plan record: ",PrintPlanRecord($planRecord{$_}),"\n"; # In a fast sync, we might not have loaded the record yet. --- 1092,1109 ---- print "Plan delete loop\n"; foreach (keys %planRecord) { + + # Tickle the pilot so it will not time out during this + $ticklecount++; + if ($ticklecount >= $doticklecount) { + $dlp->tickle(); + $ticklecount = 0; + } my($record) = $planRecord{$_}; my($pid) = $planRecord{$_}->{pilotid}; ! #print "Plan record: ",Dumper($record),"\n"; ! print "Plan record: ",PrintPlanRecord($planRecord{$_}),"\n"; # In a fast sync, we might not have loaded the record yet. *************** *** 1101,1109 **** # Action: If there is an associated Plan record that has not # already been deleted, delete it. ! # print "Log: Deleting Plan record.\n"; if (defined $pid and defined $pilotID{$pid} and not $pilotID{$_}->{deleted}) { ! # print "Log: ... and associated Pilot record.\n"; DeletePilotRecord($db, $pid); #$db->deleteRecord($pid); #delete $pilotID{$pid}; --- 1133,1141 ---- # Action: If there is an associated Plan record that has not # already been deleted, delete it. ! print "Log: Deleting Plan record.\n"; if (defined $pid and defined $pilotID{$pid} and not $pilotID{$_}->{deleted}) { ! print "Log: ... and associated Pilot record.\n"; DeletePilotRecord($db, $pid); #$db->deleteRecord($pid); #delete $pilotID{$pid}; *************** *** 1205,1223 **** print "Plan message: $'"; next; } else { ! # print stderr "Reply: |$reply|\n"; return $reply; } $reply = ""; } } ! while ( $partialReply !~ /[^\\]\n$/ ) ! { ! $SysreadBytes=sysread ! ($socket,$partialReply,1024,length($partialReply)); } } - } --- 1237,1251 ---- print "Plan message: $'"; next; } else { ! #print "Reply: |$reply|\n"; return $reply; } $reply = ""; } } ! while (sysread($socket,$partialReply,1024,length($partialReply))==1024 or /\\\Z/) { } } } *************** *** 1247,1255 **** } $netplanversion = $reply; ! # send the netplan v2.0 id string ! $id="=plan\n"; ! SendPlanCommand($socket, $id); SendPlanCommand($socket, "o$dbname\n"); $reply = ReadPlanReply($socket); --- 1275,1285 ---- } $netplanversion = $reply; ! ! # send the netplan v2.0 id string ! $id="=plan\n"; ! SendPlanCommand($socket, $id); ! SendPlanCommand($socket, "o$dbname\n"); $reply = ReadPlanReply($socket); *************** *** 1291,1297 **** $reply = ReadPlanReply($socket); if ($reply !~ /\Art\d+\s+(\d+)\s+/s) { ! die "Didn't get record I was looking for.\n"; } dorecord($db, $socket, $control, $_, $'); --- 1321,1327 ---- $reply = ReadPlanReply($socket); if ($reply !~ /\Art\d+\s+(\d+)\s+/s) { ! die "Didn't get record I was looking for.\n"; } dorecord($db, $socket, $control, $_, $'); *************** *** 1441,1446 **** close(C); - - - --- 1471,1473 ----