Why it is giving this error eventhough I'm commiting frequently?
Because you HAVE the old snapshot - the cursor c1 that selects from table being updated.

what I've to modify in above procedure to run this update successfully?
Code:
loop
  update ... where ... and rownum<=10000;
  exit when sql%rowcount<10000;
  commit;
end loop;
commit;
In the where clause you must put the condition to restrict the update to not yet updated rows.