Closed GoogleCodeExporter closed 8 years ago
Can you please attach a logcat?
Original comment by michel.racic
on 16 Sep 2009 at 4:08
I have the same issue
================================================================================
=====
D/MarketEnabler(12749): starting setValues with list item[3]
D/MarketEnabler(12749): starting setValues with list item[3] provider config[T-M
obile]
D/MarketEnabler(12749): starting setValues
I/MarketEnabler(12749): dropping shell commands for list values
I/AlertDialog(12749): [onCreate] auto launch SIP.
D/MarketEnabler(12749): Starting shell thread with [8] commands
I/MarketEnabler(12749): Starting exec of su
I/MarketEnabler(12749): Starting command loop
I/MarketEnabler(12749): Executing [setprop gsm.sim.operator.numeric 310260]
I/MarketEnabler(12749): Executing [setprop gsm.sim.operator.numeric 310260] os.f
lush()
D/MarketEnabler(12749): progress msg[1, -1] getprogress[0]
D/MarketEnabler(12749): increment progress msg[1, -1] getprogress[0]
D/su (12762): 10061:10061 com.androidiani.MarketEnabler executing 0:0 /syst
em/bin/sh
I/MarketEnabler(12749): Executing [setprop gsm.operator.numeric 310260]
I/MarketEnabler(12749): Executing [setprop gsm.operator.numeric 310260] os.flush
()
D/MarketEnabler(12749): progress msg[2, -1] getprogress[1]
D/MarketEnabler(12749): increment progress msg[2, -1] getprogress[1]
I/MarketEnabler(12749): Executing [setprop gsm.sim.operator.iso-country us]
I/MarketEnabler(12749): Executing [setprop gsm.sim.operator.iso-country us] os.f
lush()
D/MarketEnabler(12749): progress msg[3, -1] getprogress[2]
D/MarketEnabler(12749): increment progress msg[3, -1] getprogress[2]
I/MarketEnabler(12749): Executing [setprop gsm.operator.iso-country us]
I/MarketEnabler(12749): Executing [setprop gsm.operator.iso-country us] os.flush
()
D/MarketEnabler(12749): progress msg[4, -1] getprogress[3]
D/MarketEnabler(12749): increment progress msg[4, -1] getprogress[3]
I/MarketEnabler(12749): Executing [setprop gsm.operator.alpha "T-Mobile"]
I/MarketEnabler(12749): Executing [setprop gsm.operator.alpha "T-Mobile"] os.flu
sh()
D/MarketEnabler(12749): progress msg[5, -1] getprogress[4]
D/MarketEnabler(12749): increment progress msg[5, -1] getprogress[4]
I/MarketEnabler(12749): Executing [setprop gsm.sim.operator.alpha "T-Mobile"]
I/MarketEnabler(12749): Executing [setprop gsm.sim.operator.alpha "T-Mobile"] os
.flush()
D/MarketEnabler(12749): progress msg[6, -1] getprogress[5]
D/MarketEnabler(12749): increment progress msg[6, -1] getprogress[5]
I/MarketEnabler(12749): Executing [kill $(ps | grep vending | tr -s ' ' | cut -
d ' ' -f2)]
I/MarketEnabler(12749): Executing [kill $(ps | grep vending | tr -s ' ' | cut -
d ' ' -f2)] os.flush()
D/MarketEnabler(12749): progress msg[7, -1] getprogress[6]
D/MarketEnabler(12749): increment progress msg[7, -1] getprogress[6]
I/MarketEnabler(12749): Executing [rm -rf /data/data/com.android.vending/cache/*
]
I/MarketEnabler(12749): Executing [rm -rf /data/data/com.android.vending/cache/*
] os.flush()
D/MarketEnabler(12749): progress msg[8, -1] getprogress[7]
D/MarketEnabler(12749): increment progress msg[8, -1] getprogress[7]
I/ServiceManager( 54): service 'simphonebook' died
I/ServiceManager( 54): service 'isms' died
I/ServiceManager( 54): service 'iphonesubinfo' died
I/ServiceManager( 54): service 'phone' died
I/ServiceManager( 54): service 'activity.senders' died
I/ServiceManager( 54): service 'batteryinfo' died
I/ServiceManager( 54): service 'wallpaper' died
I/ServiceManager( 54): service 'SurfaceFlinger' died
I/ServiceManager( 54): service 'power' died
I/ServiceManager( 54): service 'usagestats' died
I/ServiceManager( 54): service 'telephony.registry' died
I/ServiceManager( 54): service 'activity.services' died
I/ServiceManager( 54): service 'cpuinfo' died
I/ServiceManager( 54): service 'location' died
I/ServiceManager( 54): service 'alarm' died
I/ServiceManager( 54): service 'search' died
I/ServiceManager( 54): service 'activity' died
I/ServiceManager( 54): service 'meminfo' died
I/ServiceManager( 54): service 'activity.providers' died
I/ServiceManager( 54): service 'permission' died
I/ServiceManager( 54): service 'package' died
I/ServiceManager( 54): service 'content' died
I/ServiceManager( 54): service 'htc_checkin' died
I/ServiceManager( 54): service 'activity.broadcasts' died
I/ServiceManager( 54): service 'battery' died
I/ServiceManager( 54): service 'hardware' died
I/ServiceManager( 54): service 'sensor' died
I/ServiceManager( 54): service 'bluetooth' died
I/ServiceManager( 54): service 'window' died
I/ServiceManager( 54): service 'bluetooth_a2dp' died
I/ServiceManager( 54): service 'input_method' died
I/ServiceManager( 54): service 'statusbar' died
I/ServiceManager( 54): service 'clipboard' died
I/ServiceManager( 54): service 'netstat' died
I/ServiceManager( 54): service 'wifi' died
I/ServiceManager( 54): service 'devicestoragemonitor' died
I/ServiceManager( 54): service 'audio' died
I/ServiceManager( 54): service 'mount' died
I/ServiceManager( 54): service 'connectivity' died
I/ServiceManager( 54): service 'notification' died
I/ServiceManager( 54): service 'appwidget' died
I/ServiceManager( 54): service 'checkin' died
E/installd( 61): eof
E/installd( 61): failed to read size
I/installd( 61): closing connection
Original comment by tzve...@gmail.com
on 17 Sep 2009 at 10:18
thx for the log
@tzvetan: I assume you also have modaco rom?
could one of you try the following in a terminal emulator or via adb:
First get a root shell with su in terminal emulator or "adb root" and the "adb
shell"
if doing via adb.
1) ps | grep vending
2) ps | grep vending | tr -s ' ' | cut -d ' ' -f2
see what this commands returns and post it here.
if the second command return a valid PID
try
3) kill {PID}
4) ps | grep vending
See if vending process is still running.
If it is not running anymore try
5) rm -rf /data/data/com.android.vending/cache/*
Keep logcat running during this commands and attach the log and the return of
every
command.
It could be that the vending process doesn't get killed properly before
executing the
rm command and that the rm command is taking away files that are in use.
All this commands have to be run as root.
Original comment by michel.racic
on 17 Sep 2009 at 10:43
Original comment by michel.racic
on 17 Sep 2009 at 10:43
Accepted the defect but assume that it has to do with the modaco rom.
I try to help to find a solution but will need your help as I don't have a
testphone
to put modaco rom on (just my primary phone).
Original comment by michel.racic
on 17 Sep 2009 at 10:45
And I just have a ADP but no hero to test it on :-/
Original comment by michel.racic
on 17 Sep 2009 at 10:46
Yes, i have MoDoCo ROM, and will try described instructions and send result.
Original comment by tzve...@gmail.com
on 17 Sep 2009 at 10:52
# ps | grep vending
ps | grep vending
13730 0 2072 S grep vending
# ps | grep vending | tr -s ' ' | cut -d ' ' -f2
ps | grep vending | tr -s ' ' | cut -d ' ' -f2
0
#
Original comment by tzve...@gmail.com
on 17 Sep 2009 at 10:55
# rm -rf /data/data/com.android.vending/cache/*
rm -rf /data/data/com.android.vending/cache/*
#
Original comment by tzve...@gmail.com
on 17 Sep 2009 at 10:57
Just to add - it worked on modaco when I first installed it. Ive since added an
APN
and a number of apps from the marketplace. I can only assume that either the
adding
of an APN or one of the marketplace apps is screwing with MarketEnabler
Original comment by martin.b...@gmail.com
on 17 Sep 2009 at 10:59
hmmmm... ok I see, the ps command has another output on Modaco...
I get following output with JF4C on ADP (G1):
{{{
# ps|grep vending
app_12 2150 87 92580 13268 ffffffff afe0d3e4 S com.android.vending
# ps | grep vending | tr -s ' ' | cut -d ' ' -f2
2150
}}}
The problem is that your output of ps is missing the first col with the user
(app_12
in my example) and this leads to a wrong PID (in u'r case 0)
Normaly on Uni* systems, during boot the kernel creates the shed process (aka
kernel-space swapper process) with PID 0 (u won't see it with ps)
And as your last ps command is returning 0, it kill's the mother process of all
processes and with this all child processes are killed.
Like init and kthreadd are direct child processes of shed.
I will remove busybox dependencie in next release and kill the vending process
by API.
This should solve your issue.
Until then, don't use this app because I can't give you a workaround.
You can do it manually:
{{{
su
setprop gsm.sim.operator.numeric 310260
kill $(ps | grep vending | tr -s ‘ ‘ | cut -d ‘ ‘ -f1)
rm -rf /data/data/com.android.vending/cache/*
}}}
I just modified the kill line that col 1 will be read (I assume this is the PID
but
check the header of the ps output) ;-)
Original comment by michel.racic
on 17 Sep 2009 at 11:19
@martin.byrne2
Which apps did you install between ME worked and ME killed all?
Original comment by michel.racic
on 17 Sep 2009 at 11:21
Lets see:
google maps
advanced task killer
connectbot
netcounter
powermanager
scan2pdf
wikitude
Original comment by martin.b...@gmail.com
on 17 Sep 2009 at 11:29
correct :)
ps
PID USER VSZ STAT COMMAND
1 0 292 S /init
and...
ps | grep vending
13797 0 2072 S grep vending
Original comment by tzve...@gmail.com
on 17 Sep 2009 at 11:30
Here is my list:
NetCounter
Battery Widget
GPS Status
Barcode Scanner
Task Manager
Astro file manager
TuneWiki
A online Radio
Estrongs File Explorer
Facefook for Android
Original comment by tzve...@gmail.com
on 17 Sep 2009 at 11:34
netcounter would be the one that both of you have installed...
I Browsed shortly trough the source of netcounter but I didn't see something
that
modifyies the ps output nor I know how this could be done...
Can someone of you test with a plain modaco rom (no apps installed or anything
done
since fresh flash) what the header of the ps output looks like?
Original comment by michel.racic
on 17 Sep 2009 at 11:49
Do you think that
apply sdcard:update.zip
is enought or I have to wipe first?
Original comment by tzve...@gmail.com
on 17 Sep 2009 at 12:08
@michel
What version of busybox are you running.
I have version 1.15 - ps should return PID UID - so your command is right
What happening is that the com.android.vending is not running. What you then
get is
the UID of the grep command which is 0 (root)
Original comment by martin.b...@gmail.com
on 17 Sep 2009 at 12:42
let me clarify:
Hero booted:
ps | grep vending | tr -s ' ' | cut -d ' ' -f2
returns 0 - you are just returning the UID of the person running the grep
Now start market
ps | grep vending | tr -s ' ' | cut -d ' ' -f2
returns
10007
0
0
The first line is now the UID of the vending process
either way you are killing the UID (or trying) rather than PID
Original comment by martin.b...@gmail.com
on 17 Sep 2009 at 12:54
@tzvetan I don't know, maybe without wipe it works but maybe not... you have to
try,
just don't forget to backup that you can restore your system
@martin
The command is not killing the UID ;-) but it kills the process with PID 0 and
all
processes on the system are child's of this process and get killed too.
Original comment by michel.racic
on 17 Sep 2009 at 1:08
hey what im saying is that when the hero is started, there is no vending
process - hence
#ps | grep vending
returns the grep that you are running - not the vending process. Here you are
getting
a UID of 0 (ps|grep vending is being run as su and cut -f2 is taking the UID
column)
, so you pass 0 to the kill command and it kills the phone.
If I actually start Market, then
#ps | grep vending
returns the PID and UID - however your code is selecting the second column (cut
-f2)
and so is selecting the UID value rather than PID. Passing this value to kill
will
not kill anything - as there is no process with that id.
You will then be trying to remove the cache while vending is still running.
I hope that is a bit clearer ???
Original comment by martin.b...@gmail.com
on 17 Sep 2009 at 1:17
Read comment #11
And for the grep, yes the command "|grep -v grep" should have been added to
this line
for completness, but this is not the issue because if just grep is running and
get
killed doesn't do anything.
As I said, on next release I will remove this command and kill the vending
process by
hand.
Original comment by michel.racic
on 17 Sep 2009 at 1:42
[deleted comment]
michel - i think we are going around in circles here :)
My point is just to say that - on busybox ps output is PID(col 1) UID(col 2)
ps | grep vending | tr -s ' ' | cut -d ' ' -f2 will return col 2 (i.e. the UID
column). The PID column value is never returned using the above statement, its
always
the UID.
This leads to 2 scenarios:
1)If the market is not running on the Phone:
- the above command will return the UID (col 2) of the grep command. As the grep
command is run a root, and root UID is 0, this will return 0. 0 is passed to
the kill
command and (as you explained above) running "kill 0" will kill everything.
2)If the market is running you will get the vending process UID and the grep
process
UID. Again kill probably takes both values, so again
kill $(ps | grep vending | tr -s ' ' | cut -d ' ' -f2) boils down to kill
10007 0 -
10007 being the UID of vending and 0 being the UID of the grep.
Its an inherent flaw in the code and wont work on anything with the same
implementation of ps as on the modaco (busybox 1.15).
from busybox command help(www.busybox.net)
ps
ps
Report process status
USAGE_PS
-Z Show SE Linux context
w Wide output
Example:
$ ps
PID Uid Gid State Command
1 root root S init
2 root root S [kflushd]
3 root root S [kupdate]
4 root root S [kpiod]
5 root root S [kswapd]
742 andersen andersen S [bash]
743 andersen andersen S -bash
745 root root S [getty]
2990 andersen andersen R ps
Original comment by martin.b...@gmail.com
on 17 Sep 2009 at 1:58
Anyway If you are interested, Im happy to take the code from svn and create a
modaco
specific version, which you can list on the site (or not if you prefer) ?
Original comment by martin.b...@gmail.com
on 17 Sep 2009 at 2:11
I have busybox version 1.13.2 from 20. January 2009 Installed.
If you want, you can build a special modaco version and I will list it.
Only thing you have to change is the kill command line, taking the first
argument
instead of the second.
Original comment by michel.racic
on 17 Sep 2009 at 2:23
Btw. beta version is the branch code
http://code.google.com/p/market-enabler/source/browse/#svn/branches/MarketChange
r%20Starter%20list
But the code needs urgent cleanup ;-)
Original comment by michel.racic
on 17 Sep 2009 at 2:32
Cheers - ill check it out
Better get back to the day job now :)
Original comment by martin.b...@gmail.com
on 17 Sep 2009 at 2:47
Original comment by michel.racic
on 19 Oct 2009 at 9:42
MarketEnabler works with modaco 2.6. If you are having problems, I would advise
upgrading
Original comment by martin.b...@gmail.com
on 19 Oct 2009 at 9:49
Had this issue on modaco 2.3.
I just upgraded to 2.8, and it's working now.
Original comment by tetsubo
on 23 Oct 2009 at 1:23
Sorry to say, but I am running Modaco 2.8 and with me it restarts every time,
like
decriped @ 2.2
Original comment by raminber...@gmail.com
on 24 Oct 2009 at 10:38
maybe it hasn't directly to do with the modaco rom but with some installed
software...
Original comment by michel.racic
on 25 Oct 2009 at 11:05
Well, happens to me all the time if I try to set the custom carrier after a
crashed
reboot, but if I manually power down the phone and starts it again, all goes ok.
Original comment by andreof...@gmail.com
on 1 Nov 2009 at 2:32
@andreofgyn; can u attach a logcat?
Original comment by michel.racic
on 1 Nov 2009 at 9:10
Hi.
Same problem on my Hero with the latest Modaco 2.9.
Hero crashes after I allow su usage.
Working (and crashing) of market-enabler is absolutely related with apps
installed.
At the beginning everything was fine. Then, I installed few apps, and Hero
started to
crash. I made many tries and after uninstalling ftp client named AndFTP
market-enabler worked again! I was so happy!
After few weeks the same situation happened. At this moment I have uninstall
almost
every custom app on my Hero and there is the same problem still existing -
generally
crash and reboot after choosing "fake this provider".
I need soooo badly market-enabler. This is the most useful app at all!
Please let me know what can I do for you to help with solving the problem.
Thanks in advance.
S3M
Original comment by google@s-web.pl
on 26 Nov 2009 at 4:26
can you attach your logcat of the crash?
Try the following on a console (adb or terminal app) and post the output
su
setprop gsm.sim.operator.numeric 310260
setprop gsm.operator.numeric 310260
ps|head
ps | grep vending
ps | grep vending | tr -s ‘ ‘ | cut -d ‘ ‘ -f2
kill $(ps | grep vending | tr -s ‘ ‘ | cut -d ‘ ‘ -f2)
rm -rf /data/data/com.android.vending/cache/*
getprop gsm.sim.operator.numeric 310260
getprop gsm.operator.numeric 310260
Original comment by michel.racic
on 26 Nov 2009 at 6:50
[deleted comment]
I'm running Modaco 2.9 on my HTC Hero and I have the reboot problem.
I have been able to use MarketEnabler before, but sometimes it reboots.
Here is the output from the commands you listed, I used adb.
# su
su
# setprop gms.sim.operator 310260
setprop gms.sim.operator 310260
# setprop gsm.operator.numeric 310260
setprop gsm.operator.numeric 310260
# ps|head
ps|head
PID USER VSZ STAT COMMAND
1 0 292 S /init
2 0 0 SW< [kthreadd]
3 0 0 SW< [ksoftirqd/0]
4 0 0 SW< [events/0]
5 0 0 SW< [khelper]
6 0 0 SW< [suspend]
7 0 0 SW< [early_suspend]
8 0 0 SW< [kblockd/0]
9 0 0 SW< [kmmcd]
# ps|grep vending
ps|grep vending
594 0 2072 S grep vending
Didn't kill anything since it wasn't running.
# rm -rf /data/data/com.android.vending/cache/*
rm -rf /data/data/com.android.vending/cache/*
# getprop gsm.sim.operator.numeric 310260
getprop gsm.sim.operator.numeric 310260
24007
# getprop gsm.operator.numeric 310260
getprop gsm.operator.numeric 310260
310260
Here is the output from logcat|grep "I/MarketEnabler"
I/MarketEnabler( 629): Start app
I/MarketEnabler( 629): Start setting up tabs
I/MarketEnabler( 629): Start getting UI elements
I/MarketEnabler( 629): Getting actual values from TelephonyManager
I/MarketEnabler( 629): Start getting UI elements
I/MarketEnabler( 629): Changed to tab initiated [List]
I/MarketEnabler( 629): dropping shell commands for list values
I/MarketEnabler( 629): Starting exec of su
I/MarketEnabler( 629): Starting command loop
I/MarketEnabler( 629): Executing [setprop gsm.sim.operator.numeric 310260]
I/MarketEnabler( 629): Executing [setprop gsm.sim.operator.numeric 310260]
os.flush()
I/MarketEnabler( 629): Executing [setprop gsm.operator.numeric 310260]
I/MarketEnabler( 629): Executing [setprop gsm.operator.numeric 310260]
os.flush()
I/MarketEnabler( 629): Executing [kill $(ps | grep vending | tr -s ' ' | cut
-d ' '
-f2)]
I/MarketEnabler( 629): Executing [kill $(ps | grep vending | tr -s ' ' | cut
-d ' '
-f2)] os.flush()
I/MarketEnabler( 629): Executing [rm -rf
/data/data/com.android.vending/cache/*]
I/MarketEnabler( 629): Executing [rm -rf
/data/data/com.android.vending/cache/*]
os.flush()
After doing this I successfully changed the provider.
Original comment by tetsubo
on 2 Dec 2009 at 2:02
@tetsubo
Your PS has another output and as the actual version uses -f2 argument with the
cut
command its returning the second column.
In your case this will be the user ID and if you read the userID 0 and make a
kill 0
the phone will reboot because on a *nix system PID 0 is the mother process of
all
processes => killing the mother will kill all the childs.
I planned to rewrite ME to not use shell commands anymore (except for the
setprop)
but I didn't had time for it because I'm on finishing my pre bachelor thesis
right
now but I hope I will find some time for it in the christmas holidays.
Original comment by michel.racic
on 2 Dec 2009 at 2:54
Yeah, MoDaCo uses BusyBox and they have their own ps command it seems.
I suspected that was exactly the case, but then I got really confused because
the ps
and cut command gave me the PID when I tried it later.
Maybe I made a mistake somewhere in there, I dunno.
Happy to see that the cause has been found.
Original comment by tetsubo
on 2 Dec 2009 at 3:03
Modaco 3.0, MarketEnabler 3.0.4
after this my phone restarts.
# logcat|grep "I/MarketEnabler"
logcat|grep "I/MarketEnabler"
I/MarketEnabler(31111): Start app
I/MarketEnabler(31111): Start setting up tabs
I/MarketEnabler(31111): Start getting UI elements
I/MarketEnabler(31111): Getting actual values from TelephonyManager
I/MarketEnabler(31111): Start getting UI elements
I/MarketEnabler(31111): Changed to tab initiated [List]
I/MarketEnabler(31111): dropping shell commands for list values
I/MarketEnabler(31111): Starting exec of su
I/MarketEnabler(31111): Starting command loop
I/MarketEnabler(31111): Executing [setprop gsm.sim.operator.numeric 310260]
I/MarketEnabler(31111): Executing [setprop gsm.sim.operator.numeric 310260] os.f
lush()
I/MarketEnabler(31111): Executing [setprop gsm.operator.numeric 310260]
I/MarketEnabler(31111): Executing [setprop gsm.operator.numeric 310260] os.flush
()
I/MarketEnabler(31111): Executing [kill $(ps | grep vending | tr -s ' ' | cut -
d ' ' -f2)]
I/MarketEnabler(31111): Executing [kill $(ps | grep vending | tr -s ' ' | cut -
d ' ' -f2)] os.flush()
I/MarketEnabler(31111): Executing [rm -rf /data/data/com.android.vending/cache/*
]
I/MarketEnabler(31111): Executing [rm -rf /data/data/com.android.vending/cache/*
] os.flush()
Original comment by materem...@gmail.com
on 6 Jan 2010 at 12:35
I can confirm this on the MoDaCo Custom 3.1 also.
I'm not quite sure which apps I've installed between when it last worked and
now, but
my most recent few are:
Twidroid Free
Unit Converter (Mathpad)
Pkt Auctions eBay
Transdroid (upgrade)
Handcent (upgrade)
Paypal
Shopsavvy (upgrade)
Advanced Task Killer (upgrade)
Battery Widget
Original comment by trentyar...@gmail.com
on 16 Jan 2010 at 11:10
I had this same problem on my Hero with Modaco 3.0 and ME 3.0.4
This night I uninstalled A Online Radio and it fixed the problem. Haven't
really read
through all the answers to this bug - will try to provoke the problem later
this week
when I got the time. I don't know much about the linux behind, but let's see ;)
Although it's weird that the bug suddenly appeared, since I didn't get it right
after
I installed any apps - the bug appeared after a while. Is there any way to get
a list
over the apps installed and when they were installed?
Original comment by pinno...@gmail.com
on 18 Jan 2010 at 10:27
basically it has to do with the ps output or the cut command
havent really found out why this is different for some people...
I will have to do it with the API to avoid problems with busybox stuff ;-)
Original comment by michel.racic
on 26 Jan 2010 at 10:17
[deleted comment]
I have the same problem.
ME was working fine on my GSM Hero with Modaco 3.0, but when I went to Modaco
3.1(no
wipe)
it broke.
Is a wipe or ME reinstall necessary when you go from one Modaco to another?
UPDATE:
Tried a reinstall of ME and its still rebooting...
Any suggestions?
Original comment by muv...@gmail.com
on 26 Jan 2010 at 2:25
I actually got it working. What I did was to hit the back button as soon as ME
reports
100% on faking US T-mobile. The phone doesn't reboot and the i can buy things
on the
app store!
Original comment by muv...@gmail.com
on 27 Jan 2010 at 8:26
I had the same problem a with modaco 3.1. I tried muvule's fix and it worked
for me.
You need to be quick and hit the back button before the phone starts to reboot.
Thanks.
Original comment by ronanbo...@gmail.com
on 3 Feb 2010 at 3:02
FYI: the new update (3.0.7) seems to have fixed my problem on Modaco 3.0.
Thanks a lot ;)
Original comment by pinno...@gmail.com
on 9 Feb 2010 at 5:48
Original issue reported on code.google.com by
martin.b...@gmail.com
on 16 Sep 2009 at 3:20